Переадресация порта NAT не работает, а туннель ssh не работает
У меня есть установка apache2 контейнера LXC (прослушивание контейнера 192.168.122.179:80).
Хост 10.138.141.216.
Если я туннелирую через ssh: ssh -L 45678:192.168.122.179:80 myuser@10.138.141.216 с моего компьютера, я получаю страницу apache2 (браузер по http://localhost:45678/)
НО, если я отключу туннель ssh и использую только iptables, http: //10.138.141.216: 45678 не будет работать:
[~]$ sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
9 564 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:45678 to:192.168.122.179:80
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 192.168.122.0/24 224.0.0.0/24
2 656 RETURN all -- * * 192.168.122.0/24 255.255.255.255
606 36360 MASQUERADE tcp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
0 0 MASQUERADE udp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
725 101K MASQUERADE all -- * * 192.168.122.0/24 !192.168.122.0/24
Я могу видеть, как меняются числа pkts и байтов при каждом обновлении страницы в браузере, но все, что я получаю, это "Этот сайт недоступен".
Так что туннель ssh работает, а правило iptables - нет...
ОБНОВИТЬ:
используя tcpdump я вижу "tcp port eba unreachable", почему???
14:46:40.672318 IP 10.79.41.37.57504 > mymachine.eba: Flags [S], seq 2646922897, win 8192, options [mss 1360,nop,wscale 8,nop,nop,sackOK,unknown-33 0x21cc167ee1203a070000], length 0
14:46:40.672402 IP mymachine > 10.79.41.37: ICMP mymachine tcp port eba unreachable, length 72
Wget http://192.168.122.179/ работает изнутри хоста...
2 ответа
Я не знаю почему, но LXC по умолчанию добавляет эти правила:
REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Они не были видны при использовании
iptables -t любой -L -n -v
Удаление "-t any" показало им. Удаление этих правил сделало свое дело.
Apache обычно настраивается хостами. Каждый хост прослушивает запросы от определенных доменных имен.
Чтобы ваш хост был доступен, вам нужно прослушать сам IP-адрес, или выбрать имя хоста, или установить хост по умолчанию в вашей конфигурации хостов Apache.
Вы можете проверить, работает ли конфигурация вашего хоста, используя wget или curl для выполнения запроса get на localhost.
Если Apache работает, убедитесь, что нет никаких конфликтующих правил iptables.