LINUX.ORG.RU

iptables, перенаправление трафика

 , ,


0

2

Есть игровой сервер, с другом хотим написать систему транспорта игроков по серверам. Суть: как резко перенаправить пакеты через iptables на другой сервер, если подключение уже установлено. Пробовал:

$ip1 = ip игрока $port = порт сервера $ip2 = ip 2 сервера, куда перенаправить пакеты.

iptables -A INPUT -p udp -d $ip1 --dport $port -m conntrack --ctstate ESTABLISHED,RELATED -j DNAT --to-destination $ip2

Но, как уже понятно, оно не работает :D --- P.S: нам это надо, так, как сессию на другом сервере мы уже инициализируем сами, надо только резко переводить пакеты на другой сервер. P.S.S: протокол UDP


DNAT правило нужно писать в таблицу nat, понятно, что без ″--ctstate ESTABLISHED″, после написания правила нужно убрать это соединение из таблицы conntrack и тогда оно станет NEW и на него сработает DNAT-правило. Команда, которая это делает называется conntrack.

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

mky, благодарствую за ответ :) Должна быть примерно такая схема? Создаем новое правило: iptables -t nat -A INPUT -p udp -d $ip1 --dport $port -j DNAT --to-destination $ip2 после него, DROP'аем подключение? Если так, то оно может и работает, но игрока тогда сразу отключит от сервера и правило сработает, только если он к нему пере подключится, как я понимаю... Это нам не совсем нравиться... Если вам не сложно, можете привести рабочий код?

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

iptables -t nat -A PREROUTING -p udp -d $ip1 --dport $port -j DNAT --to-destination $ip2

И, наверное, в правило нужно добавить src-ip и src порт, чтобы это было правило только для одного соединения (одного игрока).

после него, DROP'аем подключение?

Я не понял, что вы делаете с подключением, из conntrack'а записи не DROP'аются, а удаляются (delete).

но игрока тогда сразу отключит от сервера

Запускате дампер пакетов и смотрите, какие пакеты ходят и почему происходит обрыв связи, может у вас возникает icmp port unreachable, а может ссесия на новом сервере криво инициализирована.

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

Я не понял, что вы делаете с подключением, из conntrack'а записи не DROP'аются, а удаляются (delete).

Я не работал с iptables и с conntrack'ом-уж точно, не знаю, как оно все работает. Сейчас сделал apt-get install conntrack (Debian), ииии:

root@walls:~# conntrack -D conntrack v1.4.1 (conntrack-tools): Can't open handler

Видимо в ядре нет nf_conntrack (OpenVZ же), но с этим я разберусь позже.

В итоге я делаю так:

iptables -t nat -A PREROUTING --src $ip1 -p udp --dport $port -j DNAT --to-destination $ip2

а потом так: conntrack -D $ip1

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

а потом так: conntrack -D $ip1

И при этой команда сессия обрывается?

Ещё, может вам нужно будет добавлять в iptables ″-j DROP″ правило, чтобы тот сервер, на который первоначально была открыта сессия игрока, не мог её оборвать.

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