Маршрутизация. Две подсети не получается соединить. [Solved]

Доброго.

Есть подсеть - 192.168.1.0/24 (Подсеть 1)
Есть подсеть - 192.168.2.0/24 (Подсеть 2)

Хочу их соеденить.
Ставлю машину с двумя карточками. (Роутер 1)
На одну вешаю ип : 192.168.1.1, на другую ип : 192.168.2.1.
в sysctrl.conf выставляю net.ipv4.ip_forward = 1.

Пытаюсь пинговать с этого компьютера Подсеть 1 и Подсеть 2. Пингуются.

Беру машину второй подсети.
у нее /etc/conf.d/net

modules=( "iproute2" )
config_eth0=( "192.168.2.2 netmask 255.255.255.0 brd 192.168.2.255" )
routes_eth0=( "default gw 192.168.2.1" )

и если я пингую допустим 192.168.1.2 (машину подсети 1), то машина не пингуетя..
Я так понимаю, что нужно на Роутере 1 нужно прописать маршрут для всех пакетов предназначенных для подсети 192.168.1.0/24 пускать через 192.168.1.1, а все пакеты для подсети 192.168.2.0/24 пускать через 192.168.2.1.

Пытаюсь сделать так для того чтобы из подсети 2 можно было бы пинговать подсеть 1.
в /etc/conf.d/net на Роутере 1:

config_eth1=( "192.168.2.1 netmask 255.255.255.0 brd 192.168.2.255" )
routes_eth1=(
               "-net 192.168.1.0/24 gw 192.168.1.1"
            )

пытался вместо gw писать via.. результатов не принесло..
при рестарте пишет вот что:

grpr_router conf.d # /etc/init.d/net.eth1 restart
 * Caching service dependencies ...                                                                                     
 * Stopping eth1
 *   Bringing down eth1
 *     Shutting down eth1 ...                                                                                           
 * Starting eth1
 *   Bringing up eth1
 *     192.168.2.1                                                                                                      
 *   Adding routes
 *     -net 192.168.1.0/24 gw 192.168.1.1 ...
RTNETLINK answers: No such process                                                                                      

Спасибо..
З.ы. Паралельно ищу на форуме еще ответов, но нужно вложится в два часа... поэтому создал тему, может кто поможет.. спасибо.

у меня записано

у меня записано несколько иначе, и символ "-" перед net явно лишний... вообще было бы неплохо не сочинять непонятные комунды а заглянуть в net.example
routes_ppp1=( "10.0.0.0/8 via 10.44.0.1 dev ppp1" )

добавил

добавил след.:
routes_eth1=( "192.168.1.0/24 via 192.168.1.1 dev eth0" )

не помогло:

grpr_router conf.d # /etc/init.d/net.eth1 restart
 * Stopping eth1
 *   Bringing down eth1
 *     Shutting down eth1 ...                                                                                           
 * Starting eth1
 *   Bringing up eth1
 *     192.168.2.1                                                                                                      
 *   Adding routes
 *     192.168.1.0/24 via 192.168.1.1 dev eth0 ...
RTNETLINK answers: No such process   

вот откуда взял маршрут предыдущий:
http://www.nixp.ru/cgi-bin/forum/YaBB.pl?board=faq;action=display;num=1131433949

попробуй

Попробуй убрать роутинги из /etc/conf.d/net на Роутере 1 и прописать две команды:
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
я не уверен, что это то что нужно, но может поможет
P.S. Ошибка: RTNETLINK answers: No such process возникает когда ядро не может обработать роутинг...

Путь

Путь правильный, но кое-что забыл.

# Route to 192.168.1.0/24
iptables -A POSTROUTING -t nat --dst 192.168.1.0/255.255.255.0 -j SNAT --to-source 192.168.1.1

# Route to 192.168.2.0/24
iptables -A POSTROUTING -t nat --dst 192.168.2.0/255.255.255.0 -j SNAT --to-source 192.168.2.1

Accept forwarding
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

А в /etc/conf.d/net пропиши просто айпи каждого интерфейса, и дефолный роутинг для инета.

всем спасибо,

всем спасибо, этот вариант для меня подошел..

Вот это

Вот это извращение для маршрутизации между двумя локальными подсетями использовать NAT...

отличный материал

спасибо за

спасибо за материал и за подсказку.. счас буду пробовать, только приехал.. опоздал я.. не успел..
то уже до понедельника есть времька, но счас на работе еще часок и домой.. уже 12 часов на дворе.. транспорта потом не будет..

routes_eth1=(

routes_eth1=( "192.168.1.0/24 via 192.168.1.1 dev eth0" )

зачем в routes_eth1 писать маршрут для eth0?

Убери вообще

Убери вообще эти маршруты из conf.d/net, они есть изначально при поднятии интерфейсов. Все что тебе надо - прописать маршруты на клиентах с аналогичными путем. То есть для сетки 2.0

route add -net 192.168.1.0/24 gw 192.168.2.1

И для сетки 1.0:

route add -net 192.168.2.0/24 gw 192.168.1.1

Твой роутер априори знает, кто где находится, ибо обе сети для него - на расстоянии одного хопа. А вот компьютерам из разных сеток нужно прописать маршрутизатор, который знает, как маршрутизировать дальше.

upd:
Как уже говорили, у тебя на "второй машине" неверная запись маршрута.
Правильная:

routes_eth0=( "192.168.1.0/24 via 192.168.2.1" )

_______________________
From Siberia with Love!

Эх...

winterheart написал(а):
....
Убери вообще эти маршруты из conf.d/net, они есть изначально при поднятии интерфейсов. Все что тебе надо - прописать маршруты на клиентах с аналогичными путем....

Ага, NAT извращение, а маршруты прописывать на клиентах- нет...

А что, разве да?

А что, разве да? Какая ситуация, такой рецепт. Весь просвященный мир так делает. Если нужен прозрачный роутинг туда-сюда-обратно, нафиг там роутер стоит? Ставим коммутатор, делаем единую подсеть - и вперед.
_______________________
From Siberia with Love!

Да ну, зачем тогда вообще

Да ну, зачем тогда вообще маршрутизаторы или сервера, если можно все на клиентах прописать :)) Это изврат полный. Мягко говоря.

Какие маршруты

Какие маршруты на клиентах? Ненадо никаких маршрутов на клиентах. Один шлюз по умолчанию прописывается и все. И на маршрутизаторе тоже ничего не надо, надо лишь роутинг разрешить.
Я вообще херею как наистандартнейшая задача на соединение двух подсетей может столько обсасываться и придумываться столько решений.
Сказать почему нельзя делать NAT? Потому что тогда все запросы из одной подсети в другую будут иметь в IP адресе отправителя - IP адрес шлюза.

думал, уже тему

думал, уже тему никто и не обсуждает.. и не заходил уже сюда..
я посидел подумал..

и сделал так (все получилось так, как и хотел) :
Картинка - http://www.imgup.ru/image-1219741358c4cab5c511477c264ca0141e03f6a343

на клиент1 defaulе gateway указываю роутер 192.168.2.1
никаких дополнительныз маршрутов ему не прописываю

на сервер1 default gateway в интернет
прописал ему маршрут на сеть 192.168.1.0/24 через 192.168.2.1

на роутере указал default gateway 192.168.2.2

всё.

на сервер1 завел DHCP, который раздает всем в своей сети IP-адреса из сетки 192.168.2.0/24 и отдает всем default gateway 192.168.2.1

а дальше роутер уже будет всё решать, если пакет в 192.168.1.0/24, то в правый интерфейс (по картинке) отправит, если в 192.168.2.0/24, то в левый (по картинке), а если и ни туда, и ни туда, а на какую-то другую сеть, то отправит на сервер1, который у меня шлюз в интернет.

на роутере никакого NAT в этом случае и не будет.
NAT только на сервер1 работает

и правила прописывать вручную нужно только на сервер1, чтобы он знал о существовании сети 192.168.1.0/24? которая доступна через роутер

Вот, теперь все

Вот, теперь все верно.
NAT на шлюзе в инет (сервер1) нужен, потому что IP-шик реальный только у него есть. И маршрут на нем конечно нужен в подсеть 192.168.1.0/24, т.к. он тоже шлюзом является по сути.

Задача один в один.

Задача один в один. Теоретически все элементарно.
eth0 смотрит в подсеть 192.168.0.1
eth1 смотрит в подсеть 192.168.1.1
В подсети 192.168.1.1 есть dhcp
Нужно, чтобы был доступ из одной подсети в другую.

В /etc/conf.d/net пишу маршруты из одной в другую, С сервака обе подсети пингуются, а из одна из другой нет.

config_eth1=( "dhcp" )
config_eth0=( "192.168.0.1 netmask 255.255.255.0" )
routes_eth0=(
        "-net 192.168.1.0/24 gw 192.168.0.1"
 )
modules=( "iproute2" )

Задача один в один.

Задача один в один. Теоретически все элементарно.
eth0 смотрит в подсеть 192.168.0.1
eth1 смотрит в подсеть 192.168.1.1
В подсети 192.168.1.1 есть dhcp (раздает адреса только в этой подсети - для сетевухи eth1)
Нужно, чтобы был доступ из одной подсети в другую.

В /etc/conf.d/net пишу маршруты из одной в другую, С сервака обе подсети пингуются, а одна из другой нет.

config_eth1=( "dhcp" )
config_eth0=( "192.168.0.1 netmask 255.255.255.0" )
routes_eth0=(
        "-net 192.168.1.0/24 gw 192.168.0.1"
 )
modules=( "iproute2" )

чего не хватает? Уже неделю мучаюсь, кажется все просто, а на деле столкнулся - в тупике оказался.

ы

Ruzel написал(а):
чего не хватает? Уже неделю мучаюсь, кажется все просто, а на деле столкнулся - в тупике оказался.

Видимо включить форвардинг.

В sysctl.conf прописал

В sysctl.conf прописал net.ipv4.ip_forward = 1
Результат не изменился.
Или имеется вввиду что-то другое?

Дай вывод, если айпитейлблс

Дай вывод, если айпитейлблс установлены.
iptables -L

Ы

Ruzel написал(а):
config_eth1=( "dhcp" )
config_eth0=( "192.168.0.1 netmask 255.255.255.0" )
routes_eth0=(
        "-net 192.168.1.0/24 gw 192.168.0.1"
 )
modules=( "iproute2" )

Собсно, мне кажется, что

routes_eth0=(
        "-net 192.168.1.0/24 gw 192.168.0.1"
и modules=( "iproute2" )

не нужно для твоего случая.
Особонно "-net 192.168.1.0/24 gw 192.168.0.1" - это вообще как , если подсети у тя на разных сетевухах?

Цитата:Особонно "-net

Цитата:
Особонно "-net 192.168.1.0/24 gw 192.168.0.1" - это вообще как , если подсети у тя на разных сетевухах?

вот в этом и загвозка как дать понять серваку, что разные подсети на разных сетевухах.

$ sudo iptables -L 
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Ы

Так, фаер у тя отключен. Форвард разрешён. Усё должно пахать.
В твоём случае в /etc/conf.d/net дожно быть

config_eth1=( "dhcp" )
config_eth0=( "192.168.0.1 netmask 255.255.255.0" )

Во всяком случае у мя на серваке 3 сетевухи и аналогичный /etc/conf.d/net.

# cat /etc/conf.d/net

config_eth0=( "мой_внешний_ip netmask yyy.yyy.yyy.yyy" )
routes_eth0=( "default via мой_шлюз" ) # это для интета

config_eth1=( "192.168.77.254/24" )

config_eth2=( "10.120.10.254/24" )

общий случай

общий случай

config_eth0=("192.168.0.1 broadcast 192.168.0.255 netmask 255.255.255.0" )
config_eth1=("192.168.1.1 broadcast 192.168.1.255 netmask 255.255.255.0" )

routes_eth0=(
       "default via 192.168.1.100"               # адрес шлюза в инет, если есть и нужен
)

главное не забыть ВКЛЮЧИТЬ форвадинг, простой записи net.ipv4.ip_forward = 1 не достаточно,
нужна или перезагрузка или перечитывание конфига

sysctl -p

и не помешало бы глянуть вывод

route -n

__________________________________
Главное не забыть mount /dev/hands

хоть убей - не работает. С

хоть убей - не работает. С сервера пингуются обе подсети. Одна из другой - нет.

содержимое /etc/conf.d/net

config_eth1=( "192.168.1.133 broadcast 192.168.1.255 netmask 255.255.255.0" )
routes_eth1=( "default via 192.168.1.1" ) #шлюз в инет
config_eth0=( "192.168.0.1 broadcast 192.168.0.255 netmask 255.255.255.0" )
modules=( "iproute2" ) 

выполнение sysctl -p (хотя уже перезагружал машину)

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1

выполнение route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth1

Заметил такую штуку, если на eth1 адрес получает от dhcp, при /etc/init.d/net.eth1 restart
пишет вот это:

 * Caching service dependencies ...                     [ ok ]
 * Stopping eth1
 *   Bringing down eth1
 *     Shutting down eth1 ...                           [ ok ]
 * Starting eth1
 *   Bringing up eth1
 *     dhcp
 *       Running dhcpd ...                              [ ok ]
 *       eth1receied address 192.168.1.133/24
 *   Adding routes
 *     default via 192.168.1.1 ...
RTNETLINK answers: File exists                          [ !! ]

Если руками прописать (как выше приводил), то стартует без ошибок.

На всякий случай настройки на клиентских машинах:

одна подсеть в которую смотрит eth0:
ip 192.168.0.***
маска 255.255.255.0
шлюз 192.168.0.1

другая подсеть в которую смотрит eth1:
ip 192.168.1.***
маска 255.255.255.0
шлюз 192.168.1.1

на клиентских машинах шлюз

на клиентских машинах прописал шлюз сервера, обе подсети друг из друга видно.
Но связи с интернетом нет в подсети, которая 192.168.0.**

tracert 213.180.204.8

Трассировка маршрута к 213.180.204.8 с максимальным числом прыжков 30

  1    <1 мс    <1 мс    <1 мс  192.168.0.1
  2     *        *        *     Превышен интервал ожидания для запроса.
  3  ^C

upd: из подсети 192.168.1.** инет есть. Все как положено через этот же самый сервер.
Почему подсеть 192.168.0.** сервер не пускает в инет? Что еще не так?

route для 192.168.1.1

Шлюз 192.168.1.1 знает о существовании сети 192.168.0.0/24 ?
Разрешен ли там NAT для данной сети?

Шлюз в интернет надо тоже настраивать.
Или включай NAT на 192.168.1.133 для сети 192.168.0.0/24

Если я подыму NAT, то компов

Цитата:
Шлюз 192.168.1.1 знает о существовании сети 192.168.0.0/24 ?

Скорее всего нет. Как ему дать понять, что есть сеть 192.138.0.0/24

Если я подыму NAT, то компов в этой подсети видно не будет. Или я ошибаюсь?
Если ошибаюсь, подскажи на примере как это грамотно сделать.

192.168.1.1

Ruzel написал(а):
Цитата:
Шлюз 192.168.1.1 знает о существовании сети 192.168.0.0/24 ?

Скорее всего нет. Как ему дать понять, что есть сеть 192.138.0.0/24

Всё зависит от того, что там стоит.
Там надо
1. добавить route на 192.168.0.0/24
2. разрешить NAT для этой сети:
Если это не Windows и стоит iptables, ищи правила SNAT и MASQUERADE для сети 192.168.1.0/24 и повторяй их для 192.168.1.0/24
или замени на 192.168.0.0/16 (но со всеми последствиями)

Цитата:
Если я подыму NAT, то компов в этой подсети видно не будет. Или я ошибаюсь?
Если ошибаюсь, подскажи на примере как это грамотно сделать.

Можно сделать, чтобы и видно было, но это будет не так тривиально. И имеет смысл только в случае плохого отношения с админом на 192.168.1.1

http://www.gentoo.org/doc/ru/

Спасибо! Помогло, все

Спасибо! Помогло, все настроил.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".