Переадресация портов NAT не работает, а туннель ssh работает

У меня есть установка apache2 контейнера LXC (контейнер прослушивает 192.168.122.179:80).

Хост 10.138.141.216.

Если я туннелирую через ssh: ssh -L 45678:192.168.122.179:80 [email protected] с моего компьютера, я получаю страницу 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 недоступен», почему???

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 работает изнутри хоста...


person Leo    schedule 06.10.2018    source источник


Ответы (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" показало их. Удаление этих правил помогло.

person Leo    schedule 06.10.2018

Apache обычно настраивается хостами. Каждый хост прослушивает запросы от определенных доменных имен.

Чтобы ваш хост был доступен, вам нужно прослушать сам IP-адрес, указать имя хоста или установить хост по умолчанию в конфигурации хостов Apache.

Вы можете проверить, работает ли ваша конфигурация хоста, используя wget или curl для выполнения запроса на получение на локальном хосте.

Если Apache работает, убедитесь, что нет конфликтующих правил iptables.

person Webber    schedule 06.10.2018
comment
но у меня есть ‹VirtualHost *:80› и прослушивание 80 в файлах конфигурации apache, разве это не прослушивание всех интерфейсов? - person Leo; 06.10.2018
comment
Вы можете проверить это с помощью curl, отправив запрос GET на локальный хост из вашего ssh-соединения. - person Webber; 06.10.2018
comment
Я думаю, что это не сработает, поскольку iptables не должен работать на петлевом интерфейсе? - person Leo; 06.10.2018
comment
В этом и смысл; тестирование ответа, который вы получаете от вашего apache. Если ваш апач точно работает. Следующее, что нужно сделать, это действительно получить его через ваш iptables. - person Webber; 06.10.2018