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

Как MASQUERADE выбирает IP-адрес, если их несколько?

Если я настрою 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 всего для двух портов