У меня две сетевые карты, настроенные так:
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 для более быстрого соединения, поэтому мы оставим это для маршрута по умолчанию.
Затем мы определим таблицы, создадим правила, а затем создадим маршруты.
Определите две таблицы в / etc / iproute2 / rt_tables следующим образом:
100 eth0if
101 eth1if
Создайте два правила (трафик TX от 192.168.5.104 принудительно использует таблицу eth0if и т. Д.):
from 192.168.5.104 table eth0if
from 85.255.103.4 table eth1if
Затем создайте маршруты для каждого интерфейса:
Для 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