Я уже несколько дней пытаюсь решить мою проблему с NAT с помощью OpenVZ. Я использовал их руководство на их веб-сайте / вики, однако я, кажется, просто не могу заставить его работать.
Мой Linux-сервер работает на CentOS 6 (64-разрядная версия) в моем собственном доме. Маршрутизатор трафика по умолчанию для моего маршрутизатора настроен на мой Linux-ящик на 192.168.1.90 (поэтому ВСЕ трафик, если не указано иное в переадресации портов, отправляется и принимается от / до 192.168.1.90) - это отлично работает на хост-узле. Я тестировал Teamspeak 3 и Apache на портах по умолчанию. Оба они работали нормально и были доступны извне (порт 80 не используется / не может использоваться интернет-провайдером). Однако всякий раз, когда я создаю подчиненный узел, это внезапно превращается в ад.
После настройки серверов имен я могу пинговать, вызывать имена хостов и делать все, что я делал бы как клиент, однако я не могу разместить что-либо, к чему может получить доступ извне. Давайте снова возьмем Apache, к нему я могу получить доступ к 192.168.1.91 изнутри сети, но не могу получить доступ извне, даже если я добавлю в свой маршрутизатор конфигурацию переадресации портов, указывающую на 0,91 вместо 0,90 по умолчанию - не повезло. В руководстве OpenVZ, как указано ранее, я выполнил все шаги и дважды проверил, все в порядке и перешел к «Доступ из Интернета в контейнер» - моя конфигурация / iptables выглядит следующим образом:
iptables -t nat -A PREROUTING -p tcp -d 46.32.xx.xxx --dport 80 \
-i eth0 -j DNAT --to-destination 192.168.1.91:80;
iptables -t nat -A POSTROUTING -s 192.168.1.91 -o eth0 -j SNAT --to 46.32.xx.xxx;
Я пробовал с последней строкой и без нее, поскольку она должна направлять трафик изнутри наружу, что отлично работает. Я не могу посетить свой веб-сайт как через порт 80, так и через порт 8081 (первая строка --dport, которую я пытался изменить на 8081).
На canyouseeme.org я попытался найти эти порты. Узел хоста работал нормально, когда был запущен Apache, но на подчиненном узле с этой конфигурацией IPtables он дает «Нет маршрута к хосту». Без этого просто выдает «В соединении отказано».
Мой полный список правил IPTables выглядит следующим образом без указанного ранее правила:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Я думаю, проблема не в вашем хосте, это в вашем контейнере, возможно, в нем нет маршрута по умолчанию, попробуйте:
ip route
и убедитесь, что есть правило маршрута по умолчанию