Отдельный сетевой трафик на двух сетевых интерфейсах


11

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

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

Сценарий таков.

  • Каждый компьютер в сети имеет две сетевые карты.
  • Производственный интерфейс для каждого - eth0(GW = 10.10.10.1).
  • Интерфейс управления для каждого из них eth1(GW = 192.168.100.1).
  • Производство и управление трафиком должны быть полностью разделены.

Ниже я написал, что я попробовал с Debian Wheezy. И моя проблема в том, что, хотя у меня есть хосты, настроенные таким образом, что они взаимодействуют на обоих интерфейсах, отдельные хосты, похоже, «слышат» трафик на неправильном интерфейсе. Например:

Host 140

eth0      Link encap:Ethernet  HWaddr 08:00:27:d1:b6:8f
          inet addr:10.10.10.140  Bcast:10.10.10.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fed1:b68f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1341 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2530 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:641481 (626.4 KiB)  TX bytes:241124 (235.4 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:ad:14:b6
          inet addr:192.168.100.140  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fead:14b6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7220 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5257 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:602485 (588.3 KiB)  TX bytes:1022906 (998.9 KiB)

От хоста 140, я выполнить эту команду: tcpdump -i eth0. В отдельном сеансе на хосте 140 я выполняю ping 192.168.100.50.

19:17:29.301565 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 10, length 64
19:17:30.301561 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 11, length 64
19:17:31.301570 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 12, length 64
19:17:32.301580 IP 192.168.100.140 > 192.168.100.50: ICMP echo request, id 1400, seq 13, length 64

Почему я вижу вышеупомянутый вывод eth0? Я думаю, что я должен видеть трафик только 10.10.10.140. Я также вижу это eth1, как и ожидалось:

19:18:47.805408 IP 192.168.100.50 > 192.168.100.140: ICMP echo request, id 1605, seq 247, length 64

Если я пинг с хоста 50 (те же ifconfigрезультаты - только другой последний квад), то eth0молчит, и я вижу эхо ICMP eth1, как и ожидалось.

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

  • Debian Wheezy (7.x) или Debian Jessie (8.x)
  • Корпоративный Linux (6.x) (RedHat / CentOS / Scientific / Oracle).

Я знаю, что решение для Debian должно быть хорошим как для Уизи, так и для Джесси, и что решение для EL должно быть одинаковым для всех версий EL 6.x. Я хотел бы избежать использования сценария RC для выполнения команд, вместо этого выбрав файлы конфигурации.

В Debian соответствующие файлы конфигурации, о которых я знаю:

  • /etc/network/interfaces

В EL 6.x соответствующие файлы конфигурации, о которых я знаю:

  • /etc/sysconfig/network
  • /etc/sysconfig/network-scripts/ifcfg-eth0
  • /etc/sysconfig/network-scripts/ifcfg-eth1
  • /etc/sysconfig/network-scripts/route-eth0
  • /etc/sysconfig/network-scripts/route-eth1
  • /etc/sysconfig/network-scripts/rule-eth0
  • /etc/sysconfig/network-scripts/rule-eth1

Мой /etc/network/interfacesфайл Debian 8 "Jessie" :

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# Production interface
auto eth0
allow-hotplug eth0
iface eth0 inet static
  address 10.10.10.140
  netmask 255.255.255.0
  gateway 10.10.10.1

# Management interface
auto eth1
allow-hotplug eth1
iface eth1 inet static
  address 192.168.100.140
  netmask 255.255.255.0

Я думаю, netstat -anrможет проиллюстрировать проблему:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.10.10.1      0.0.0.0         UG        0 0          0 eth0
10.10.10.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.100.0   0.0.0.0         255.255.255.0   U         0 0          0 eth1

проверкаiptabels -L -t nat
Персидский залив

Ответы:


7

Я хотел бы узнать больше об этой теме, чтобы улучшить конфигурацию, чтобы она была наилучшей, но вот что я имею до сих пор. Даже без включения ARP-фильтрации на всех сетевых интерфейсах ( net.ipv4.conf.all.arp_filter = 0), как упоминалось @spuk, в этой конфигурации трафик кажется полностью разделенным.

Файл /etc/iproute2/rt_tables, по крайней мере, в EL 6.x и DEB 7/8 одинаков. Это файл, который создает именованную таблицу маршрутизации для статических маршрутов.

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
1 mgmt

Выше номер именованного статического маршрута 1, по существу, произвольный; или каждый статический маршрут получает свой уникальный номер от 1 до 252.

Файл /etc/network/interfacesв DEB 7/8, по крайней мере:

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
  iface lo inet loopback

# The production network interface
# The 'gateway' directive is the default route.
# Were eth0 configured via DHCP, the default route would also be here.
auto eth0
allow-hotplug eth0
iface eth0 inet static
  address 10.10.10.140
  netmask 255.255.255.0
  gateway 10.10.10.1

# The management network interface
# The 'gateway' directive cannot be used again because there can be
# one, and only one, default route. Instead, the 'post-up' directives
# use the `mgmt` static route.
auto eth1
allow-hotplug eth1
iface eth1 inet static
  address 192.168.100.140
  netmask 255.255.255.0
  post-up ip route add 192.168.100.0/24 dev eth1 src 192.168.100.140 table mgmt
  post-up ip route add default via 192.168.100.1 dev eth1 table mgmt
  post-up ip rule add from 192.168.100.140/32 table mgmt
  post-up ip rule add to 192.168.100.140/32 table mgmt

Результат ip route showна Debian:

default via 10.10.10.1 dev eth0
10.10.10.0/24 dev eth0  proto kernel  scope link  src 10.10.10.140
192.168.100.0/24 dev eth1  proto kernel  scope link  src 192.168.100.140

/etc/sysconfig/networkФайл EL 6.x :

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.10.10.1

Выше GATEWAY является маршрутом по умолчанию. Ниже, если для BOOTPROTOCOL установлено значение DHCP, маршрут по умолчанию будет получен из DHCP.

/etc/sysconfig/network-scripts/ifcfg-eth0Файл EL 6.x , без "HWADDR" и "UUID":

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=10.10.10.140
NETMASK=255.255.255.0
NETWORK=10.10.10.0
BROADCAST=10.10.10.255

/etc/sysconfig/network-scripts/ifcfg-eth1Файл EL 6.x , без "HWADDR" и "UUID":

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTOCOL=none
IPADDR=192.168.100.140
NETMASK=255.255.255.0
NETWORK=192.168.100.0
BROADCAST=192.168.100.255

/etc/sysconfig/network-scripts/route-eth1Файл EL 6.x :

192.168.100.0/24 dev eth1 table mgmt
default via 192.168.100.1 dev eth1 table mgmt

/etc/sysconfig/network-scripts/rule-eth1Файл EL 6.x :

from 192.168.100.0/24 lookup mgmt

Результат ip route showна EL 6.x:

192.168.100.0/24 dev eth1  proto kernel  scope link  src 192.168.100.160
10.10.10.0/24 dev eth0  proto kernel  scope link  src 10.10.10.160
169.254.0.0/16 dev eth0  scope link  metric 1002
169.254.0.0/16 dev eth1  scope link  metric 1003
default via 10.10.10.1 dev eth0

4

Я не полностью прочитал все ваши посты (извините, не могу сейчас потратить время), но я полагаю, что это может быть связано с тем, как Linux реализует модель IP-хоста :

... Реализация IPv4 в Linux по умолчанию использует модель слабого хоста. ...

С этой же страницы:

... Если стек IP реализован с использованием модели слабого хоста, он принимает любой локально предназначенный пакет независимо от сетевого интерфейса, на котором был получен пакет. ...

То есть в Linux по умолчанию IP-адреса «принадлежат хосту», а не строго «интерфейсу». Вы можете изменить это поведение с помощью arp_filter, rp_filter, arp_announce, arp_ignoreпараметры ядра (получили от LVS: ARP - Проблемный , видел здесь ). Также смотрите ip-sysctl.txt .


Эта статья отлично работала для меня: sivel.net/2006/12/linux-multi-homing
Ричард Гомес,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.