Если я настрою Linux iptables MASQUERADE
Правило для трафика, исходящего из определенного интерфейса, но у этого интерфейса несколько IP-адресов, как выбирается исходный IP-адрес?
В качестве примера предположим, что я добавляю такое правило:
$ iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
… И этот интерфейс выглядит так:
$ ip addr show dev eno1
1: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 94:18:82:35:a2:c1 brd ff:ff:ff:ff:ff:ff
inet 10.136.122.97/24 scope global eno1
valid_lft forever preferred_lft forever
inet 10.136.122.98/24 scope global eno1
valid_lft forever preferred_lft forever
Маскарад выбирает адрес точно так же, как исходный адрес выбирается при маршрутизации.
Итак, вы можете использовать ip route get <dst>
команда для определения адреса, который будет использоваться в качестве адреса источника после маскировки.
Если вас интересует более подробная информация, вы можете заглянуть в исходный код.
IP вообще не будет выбран. Пакеты будут приходить с первого IP-адреса октета. Если вы хотите контролировать это, вы можете справиться с этим с помощью iptables SNAT.
Например, если вы хотите отправлять почту и просматривать веб-страницы с одного IP-адреса, а все остальное - с другого, выполните:
iptables -t nat -A POSTROUTING -o eno1 -m tcp --dport 80 -j SNAT --to 10.136.122.98
iptables -t nat -A POSTROUTING -o eno1 -m tcp --dport 443 -j SNAT --to 10.136.122.98
iptables -t nat -A POSTROUTING -o eno1 -m tcp --dport 587 -j SNAT --to 10.136.122.98
iptables -t nat -A POSTROUTING -o eno1 -m tcp --dport 465 -j SNAT --to 10.136.122.98
iptables -t nat -A POSTROUTING -o eno1 -m tcp --dport 25 -j SNAT --to 10.136.122.98
Все остальные выйдут из 10.136.122.97 через цель MASQUERADE.
Мое объяснение в любом случае повторяется: IPTables и SNAT всего для двух портов