Я использую брандмауэр iptables с 5 псевдонимами IP-адресов (фактический IP 10.64.18.1). Эта машина также является моим выходом для всех внутренних машин (192.168.18. *). Моя проблема в том, что когда выходит 192.168.18.65, мне нужен мой шлюз, чтобы указать IP-адрес 10.64.18.107, а не 10.64.18.1. Это возможно? Есть ли команда постмаршрутизации, которая сделает это?
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [276:56637]
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i br1 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i br0 -o br1 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 21 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 22 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p udp -m udp --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 2048:2248 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
*nat
:PREROUTING ACCEPT [1558:188540]
:POSTROUTING ACCEPT [55:4040]
:OUTPUT ACCEPT [87:6458]
-A PREROUTING -i br1 -p tcp -m tcp -d 10.64.18.107 --dport 2048:2248 -j DNAT --to-destination 192.168.18.65
-A PREROUTING -i br1 -p tcp -m tcp -d 10.64.18.146 --dport 53 -j DNAT --to-destination 192.168.18.50:53
-A PREROUTING -i br1 -p udp -m udp -d 10.64.18.146 --dport 53 -j DNAT --to-destination 192.168.18.50:53
-A PREROUTING -i br1 -p tcp -m tcp -d 10.64.18.144 --dport 21 -j DNAT --to-destination 192.168.18.60:21
-A PREROUTING -i br1 -p tcp -m tcp -d 10.64.18.144 --dport 22 -j DNAT --to-destination 192.168.18.60:22
-A PREROUTING -i br1 -p tcp -m tcp -d 10.64.18.126 --dport 22 -j DNAT --to-destination 192.168.18.126:22
-A PREROUTING -i br1 -p tcp -m tcp -d 10.64.18.118 --dport 22 -j DNAT --to-destination 192.168.18.118:22
-A POSTROUTING -o br1 -j MASQUERADE
COMMIT
Использовать исходный nat (SNAT
) rules вместо MASQUERADE
. Это позволяет вам контролировать исходный адрес, поэтому вы можете сделать что-то вроде этого:
iptables -t nat -A POSTROUTING -o br1 \
-s 192.168.18.65 -j SNAT --to-source 10.64.18.107
И так далее.
Если вы посмотрите на iptables
man вы найдете следующее в описании MASQUERADE
вариант:
Его следует использовать только с динамически назначаемыми IP-соединениями (коммутируемым доступом): если у вас есть статический IP-адрес, вы должны использовать цель SNAT.