LINUX.ORG.RU
решено ФорумAdmin

OpenVZ, NAT и tcp6


0

0

Здравствуйте. Есть сервер с 1 статическим ip адресом. На нем openvz контейнеры с локальными адресами 10.0.0.0/8. Некоторые их порты через NAT подключены к портам статического ip, чтобы можно было к ним подключаться через интернет (делал, как написано здесь https://openvz.org/Using_NAT_for_container_with_private_IPs). Например:

iptables -t nat -I PREROUTING 1 -p udp -d 85.25.146.xxx --dport 1000 -i eth0 -j DNAT --to-destination 10.0.0.1:22;
iptables -t nat -I PREROUTING 1 -p tcp -d 85.25.146.xxx --dport 1000 -i eth0 -j DNAT --to-destination 10.0.0.1:22;

Все работает отлично. Но мне понадобилось установить таким образом игровой сервер projectzomboid (раньше ставил starbound, там все нормально работало). Я это сделал таким правилом:

iptables -t nat -I PREROUTING 1 -p tcp -d 85.25.146.xxx --dport 1001 -i eth0 -j DNAT --to-destination 10.0.0.1:16261;
iptables -t nat -I PREROUTING 1 -p udp -d 85.25.146.xxx --dport 1001 -i eth0 -j DNAT --to-destination 10.0.0.1:16261;

Клиент залогинивается на 16261 порту, все норм. Потом клиента должно кидать на 16262 + N порт и там уже проходить игра. Вот только этого почему-то не происходит. Я протестировал на сервере с выделенным ip, зашел в игру и запустил команду netstat -ntu

netstat -ntu
tcp6       0      0 62.75.130.xxx:16263     95.135.118.xxx:25990     TIME_WAIT

Выходит, нужно настроить iptables так, чтобы он пропускал tcp6 к локальному серверу. Но как это сделать?

Отключил поддержку ipv6 на сервере, теперь netstat показывает просто tcp, но все-равно почему-то не работает.



Последнее исправление: akahito (всего исправлений: 4)

На сервере с выделенным IP запустил прослушку порта 16263

nc -l -p 16263 -vv
listening on [any] 16263 ...
connect to [85.25.146.xxx] from 32-118-135-95.pool.ukrtel.net [95.135.118.32] 29171

Выходит, что NAT здесь вообще не срабатывает и запрос идет на статический ип, а не на локальный... Как быть?

akahito
() автор топика
Ответ на: комментарий от akahito

А с чего он должен идти на локальный, если клиента запустило на «16262 + N» ? Откуда возьмётся NAT для него ?

AS ★★★★★
()
Ответ на: комментарий от AS

Но как тогда реализовать? Есть ли модуль для iptables, чтобы можно было прикрепить какие-то данные к IP, а потом их использовать для перенаправления? Вот для чего это нужно:

1) приходит пакет на порт 1000, он подпадает под правило и перенаправляется на локальный сервер. Где-то заносится запись, что этот IP-адрес бы перенаправлен на такой-то сервер. 2) приходит второй пакет, если он не подпадает не под какое правило и у него есть запись о том, что он был перенаправлен на локальный сервер, он перенаправляется туда же.

akahito
() автор топика
Ответ на: комментарий от akahito

Возможно, это решаемо через nf_conntrack, но вот есть ли модуль, который тебе нужен - это вопрос.

AS ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.