-1

У меня Linux-машина с двумя сетевыми картами, мне нужно использовать одну для входящих пакетов, другую для исходящих пакетов.

Текущий сценарий

1 ответ1

1

Если вы согласитесь использовать один IP/ префикс на вашем компьютере (назовем его XXXX / Y, со шлюзом GGGG), то это можно сделать тривиально.

  • Добавьте свой адрес к eth0 , но с полным префиксом подсети.

    например, ip addr add X.X.X.X/32 dev eth0

  • Не устанавливайте адрес на eth1. Если он есть, очистите его с помощью ip -4 addr flush dev eth1

  • Добавьте маршруты подсети и шлюза через eth1

    ip route add X.X.X.X/Y dev eth1 ip route add default via G.G.G.G dev eth1

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

    sysctl -w net.ipv4.conf.eth0.rp_filter = 0 sysctl -w net.ipv4.conf.eth1.rp_filter = 0

  • Если оба ваших сетевых интерфейса подключены к коммутатору, вам не нужно отвечать на ARP на eth1. Поскольку мы добавили IP-адрес к eth0 , мы можем просто установить arp_ignore на eth1 равным 1 (только ARP для адресов eth1 ) или 8 (ничего не отвечать).

    sysctl -w net.ipv4.conf.eth1.arp_ignore = 8

Как только эта конфигурация будет выполнена, будет только один трафик, который будет проходить в обратном порядке: если ядро получит запрос ARP для XXXX от eth0 , то оно ответит, используя eth0 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .