Несколько интерфейсов Ethernet

У меня есть две сетевые карты, настроенные так:

eth0      Link encap:Ethernet  HWaddr 00:19:d1:31:08:e8  
          inet addr:192.168.5.104  Bcast:192.168.5.255  Mask:255.255.255.0
          inet6 addr: fe80::219:d1ff:fe31:8e8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4564126 errors:590 dropped:0 overruns:0 frame:329
          TX packets:9707383 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1151788275 (1.0 GiB)  TX bytes:189318786 (180.5 MiB)
          Interrupt:20 Memory:e0300000-e0320000 

eth1      Link encap:Ethernet  HWaddr 00:e0:4c:51:0d:55  
          inet addr:85.255.103.4  Bcast:85.255.103.255  Mask:255.255.255.0
          inet6 addr: fe80::2e0:4cff:fe51:d55/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5466 errors:0 dropped:0 overruns:0 frame:0
          TX packets:499 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:518961 (506.7 KiB)  TX bytes:34236 (33.4 KiB)
          Interrupt:22 Base address:0x1000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:136 errors:0 dropped:0 overruns:0 frame:0
          TX packets:136 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:15556 (15.1 KiB)  TX bytes:15556 (15.1 KiB)

IP-маршрут:

$ ip route
192.168.5.0/24 dev eth0  proto kernel  scope link  src 192.168.5.104 
85.255.103.0/24 dev eth1  proto kernel  scope link  src 85.255.103.4 
default via 192.168.5.1 dev eth0 
default via 85.255.103.1 dev eth1

Когда я пингую IP-адрес eth1, я не получаю ответа.

С помощью tcpdump я понял, что на все эхо-запросы ICMP, отправленные на eth1, отвечают через интерфейс eth0.

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

У eth0 более быстрое интернет-соединение, я просто хочу сохранить eth1 и проходить через него, когда приложение привязывается к этому конкретному ip.

3 ответа

Удалите шлюз, определенный для eth0 (192.168.5.1). Если вам нужно несколько маршрутов по умолчанию, вам придется использовать iproute2 для создания политики для него.

Кажется, вам нужно удалить второй шлюз по умолчанию:

  • route del default 192.168.5.1

После этого 85.255.103.4 IP будет работать, но у вас будут проблемы с подсетью 192.168.5.0/24. Чтобы это исправить, вам нужно направить все пакеты с исходным IP-адресом 192.168.5.10 через 192.168.5.1. Для этого используйте политику маршрутизации:

  • echo '300 eth0tbl' >> /etc/iproute2/rt_tables
  • ip route add default via 192.168.5.1 table eth0tbl
  • ip rule add from 192.168.5.10 table eth0tbl

В таких ситуациях лучше всего быть явным.

Существует множество причин, по которым вы не сможете выполнить ping или ssh к IP на eth1, но для начала вам следует настроить маршрутизацию на основе политик, которая заставляет трафик использовать тот же интерфейс для TX, который использовался для RX.

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

Далее мы определим таблицы, создадим правила и затем создадим маршруты.

  1. Определите две таблицы в /etc/iproute2/rt_tables следующим образом:

    100 eth0if
    101 eth1if
    
  2. Создайте два правила (трафик TX из 192.168.5.104 принудительно использует таблицу eth0if и т. Д.):

    from 192.168.5.104 table eth0if
    from 85.255.103.4 table eth1if
    
  3. Затем создайте маршруты для каждого интерфейса:

    • Для eth0:

      default via 192.168.5.1 dev eth0 table eth0if
      192.168.5.0/24 via 192.168.5.104 dev eth0 table eth0if
      192.168.5.0/24 via 192.168.5.104 dev eth0 table main
      
    • Для eth1:

      default via 85.255.103.1 dev eth1 table eth1if
      85.255.103.0/24 via 85.255.103.4 dev eth1 table eth1if
      85.255.103.0/24 via 85.255.103.4 dev eth1 table main
      

Теперь любое сокетное соединение с eth1 должно отвечать от eth1 и быть успешным. Однако любое удаленное соединение, выполненное из этого ящика, которое не предназначено для 85.255.103.0/24, все равно будет использовать маршрут по умолчанию (eth0).

ПРАВИЛО: (Если маршрут не существует, используется по умолчанию)

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

  • Например, если вам нужен маршрут хоста к определенному серверу Google, вы должны использовать:

    74.125.224.194/32 via 85.255.103.1 dev eth1 src 85.255.103.4 table eth1if
    
  • Или, если вы хотите сделать то же самое с подсетью, вы бы:

    74.125.224.0/24 via 85.255.103.1 dev eth1 src 85.255.103.4 table eth1if
    
Другие вопросы по тегам