Сеть с несколькими сетями

16

У меня есть сервер Ubuntu 12.04 с 4 сетевыми адаптерами. Мне нужно использовать каждый сетевой адаптер для отдельной функции. Вот описание моей установки:

etho = 10.234.0.2 netmask = 255.255.255.252 gw = 10.234.0.1 This is on vlan 234
eth1 = 10.235.0.2 netmask = 255.255.255.252 gw = 10.235.0.1 This is on vlan 235
eth2 = 10.236.0.2 netmask = 255.255.255.252 gw = 10.236.0.1 This is on vlan 236
eth3 = 10.237.0.2 netmask = 255.255.255.252 gw = 10.237.0.1 This is on vlan 237

Мне нужно иметь возможность направлять трафик на и с отдельных IP-адресов для отдельных веб-сервисов. т. е. 10.235.0.2 - это веб-сайт, 10.236.0.2 - это другой сайт, а 10.237.0.2 - третий сайт. Первый IP предназначен для управления сервером.

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

Вот что в моем /etc/network/interfacesфайле:

auto lo
iface lo inet loopback

# WWW Management
auto eth0
iface eth0 inet static
address 10.234.0.2
netmask 255.255.255.252
gateway 10.234.0.1
nameseervers 10.230.1.103, 10.230.70.70

# WWW
auto eth1
iface eth1 inet static
address 10.235.0.2
netmask 255.255.255.252
gateway 10.235.0.1

# WTB
#auto eth2
#iface eth2 inet static
#address 10.236.0.2
#netmask 255.255.255.252
#gateway 10.236.0.1

# Moodle
#auto eth3
#iface eth3 inet static
#address 10.237.0.2
#netmask 255.255.255.252
#gateway 10.237.0.1

Я отключил последние две сети, чтобы облегчить путаницу.

Заранее благодарен за всю помощь и комментарии и предложения.

user168645
источник

Ответы:

15

Выполнив обычную настройку только eth0, я вернулся и добавил конфигурацию для eth1. Только с eth0 вверх, таблица маршрутов была:

# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100

Но как только я поднял eth1, порядок операторов маршрута по умолчанию определил, какой интерфейс всегда использовался. Как показано ниже, он выбирает маршрут eth1 к шлюзу 192.168.1.65.

# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.1.65 dev eth1 metric 100
default via 192.168.0.97 dev eth0 metric 100

только один оператор шлюза

Первой проблемой может быть дополнительный маршрут по умолчанию через 192.168.1.65. Он появляется там, если определение eth1 в / etc / network / interfaces содержит инструкцию «gateway 192.168.1.65». Поэтому удалите все лишние операторы шлюза и сбросьте интерфейс:

# ifdown eth1
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100

настроить новую таблицу маршрутизации

Создайте новую отдельную таблицу маршрутизации, содержащую маршрут по умолчанию, подходящий для всего трафика, вытекающего из eth1. Номер таблицы здесь не важен; 101 просто не является основной таблицей маршрутизации. Сделайте это с помощью команды post-up в конфигурации eth1 в / etc / network / interfaces. Добавьте только одну публикацию на eth1; Не добавляйте его ни в один из подинтерфейсов eth1 :.

post-up ip route add default via 192.168.1.65 dev eth1 table 101

Отказов eth1. Основная таблица маршрутизации не изменяется, и таблица 101 будет содержать маршрут по умолчанию через 192.168.1.65, если eth1 работает.

# ifdown eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100

# ip route show table 101   (ie, table is empty, no output)
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100

# ip route show table 101
default via 192.168.1.65 dev eth1

новое правило маршрутизации

Добавьте правило маршрутизации, чтобы использовать таблицу 101 для выбора маршрута по умолчанию для пакетов, которые должны выходить из eth1.

# ip rule add from 192.168.1.64/27 lookup 101
# ip rule show
0:     from all lookup local
32765: from 192.168.1.64/27 lookup 101
32766: from all lookup main
32767: from all lookup default

Также добавьте правило в /etc/network/interfacesфайл:

post-up ip rule add from 192.168.1.64/27 lookup 101

Теперь обязательно добавьте очистку, чтобы удалить маршрут и правило, когда интерфейс выходит из строя:

post-down ip rule del from 192.168.1.64/27
post-down ip route del default via 192.168.1.65 table 101

[РЕДАКТИРОВАТЬ для Ubuntu 16.04+] Как указано здесь и из теста, который я сделал из этой справки, ip route2 изменил свою структуру команд. Для того, чтобы сделать работу, вам придется немного адаптировать, чтобы сделать в порядке, как man ip очки .

up ip route add default table 101 dev eth1 via 192.168.1.65
up ip rule add from 192.168.1.64/27 lookup 101
down ip rule del from 192.168.1.64/27
down ip route del default table 101 via 192.168.1.65

В противном случае вы получите команду ifdown-ifup с сообщением об ошибке @ifdown (стандартное сообщение о том, что периферийные устройства настроены неправильно) и @ifup при отсутствии маршрута в таблице 101.

Крейг Константин
источник
Хорошо, но я не люблю использовать rc.local .. ищу более элегантный заключительный шаг ..
drAlberT
Это было отредактировано, я полагаю :) ..
drAlberT
На самом деле есть файл / etc / interfaces или это опечатка?
user100464
@ user100464/etc/network/interfaces
Zenexer
В ответе есть ссылка на первое. Я не могу редактировать это.
user100464