Назад | Перейти на главную страницу

Несколько интерфейсов 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.

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

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

  • route del default 192.168.5.1

После этого IP 85.255.103.4 будет работать, но у вас будут проблемы с подсетью 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