Назад | Перейти на главную страницу

Перенаправлять одно и то же соединение несколько раз [IPTABLES]

Я пытаюсь перенаправить TCP-соединения порта несколько раз на другие порты, я пробовал это раньше, но не работал:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 60000 -j REDIRECT --to-port 60001
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 60001 -j REDIRECT --to-port 60002

Я пытаюсь получить порт 6000 для перенаправления tcp-соединений на порт 60001, тогда порт 60001 перенаправит соединение на порт 60002.

X -> Y -> Z

что мне делать?

Ваш шаг по смягчению последствий должен перенаправить соединение на ваш игровой сервер, вы не можете сделать это с помощью IPTables.

Вы не можете дважды сопоставить один и тот же пакет с разными правилами DNAT. Но вы можете сделать всю структуру более сложной и, следовательно, более гибкой.

Вы можете создать цепочку для каждого порта назначения, который хотите обработать:

iptables -t nat -N port60000
iptables -t nat -N port60001

Если вы сопоставляете пакет, вы отправляете его не в цель DNAT, а в соответствующую цепочку:

iptables -t nat -A PREROUTING -p tcp --dport 60000 -j port60000
iptables -t nat -A PREROUTING -p tcp --dport 60001 -j port60001

В исходном состоянии цепочки делают то же самое, что и старые команды, только немного медленнее ...

iptables -t nat -A port60000 -p tcp -j DNAT --to-destination :60001
iptables -t nat -A port60001 -p tcp -j DNAT --to-destination :60002

Если вы хотите изменить 60000 => 60001 к 60000 => 60002 тогда вы можете изменить содержание port60000:

iptables -t nat -A port60000 -p tcp -j port60001
iptables -t nat -D port60000 -p tcp -j DNAT --to-destination :60001

Но то, что это возможно, не означает, что это лучше, чем воссоздание правил после изменения.