Тестовая система. Необходимо с помощью iptables поменять порт приложению (читай перебросить с eth0 на lo). На примере ssh, который висит на 127.0.0.1.
sysctl net.ipv4.ip_forward=1
sysctl -w net.ipv4.conf.eth0.route_localnet=1
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT # с этой строкой не работает
#iptables -A INPUT -d 127.0.0.1 -j ACCEPT # с этой - все ок
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 2222 -j ACCEPT
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 2222 -j DNAT --to-destination 127.0.0.1:22
С iptables только начал разбираться поэтому вполне возможно что что-то делаю не правильно.
Вопрос почему данная конструкция не работает если для lo все разрешить - «iptables -A INPUT -i lo -j ACCEPT»??
При этом если явно указать локальный адрес "-d 127.0.0.1 -j ACCEPT", то все работает.
Или DNAT на 127.0.0.1:22 никак не касается lo интерфейса?