Заранее спасибо за помощь.
Я пробовал читать здесь и искать, но не могу заставить его работать.
Компьютер А:192.168.1.2 Компьютер B:192.168.1.3
Я пытаюсь отправить UDP-сообщение с.2 на.3 и изменить порт..2 отправит сообщение на 1003, и я хочу, чтобы.3 принял его на 1004.
Приведенный ниже код размещен на компьютере.3
iptables -t nat -A PREROUTING -p udp -i eth0 -d 192.168.1.2 --dport 1003 -j DNAT --to-destination 192.168.1.3:1004
iptables -t nat -A PREROUTING -i eth0 -d 192.168.1.2 -p udp --dport 1003 -j REDIRECT --to-ports 1004
iptables -A FORWARD -i eth0 -p udp -d 192.168.1.2 --dport 1004 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Ваши совпадения неверны. Они сработают, если пункт назначения был 192.168.1.2
. В вашем случае источник — 192.168.1.2
, а пункт назначения — 192.168.1.3
.
Также кажется, что вам нужно только DNAT
правило или правило REDIRECT
, а не оба.
Правило фильтрации должно находиться в цепочке INPUT
, поскольку пунктом назначения является локальный компьютер. Я не вижу смысла использовать модуль state
в этом правиле, но может возникнуть необходимость добавить другие правила, связанные с отслеживанием соединений; неясно, нужны ли они вообще. Это зависит от остальной части брандмауэра. Если в брандмауэре ничего нет, то и правила фильтрации не нужны, потому что все равно все будет включено.
Кстати, state
устарел, вместо него следует использовать модуль conntrack
, соответствие ctstate
.
Итак, вам потребуются следующие два правила:
iptables -t nat -A PREROUTING -s 192.168.1.2 -d 192.169.1.3 -p udp --dport 1003 -j REDIRECT --to-ports 1004
iptables -t filter -A INPUT -s 192.168.1.2 -p udp --dport 1004 -j ACCEPT
Первое правило перенаправляет входящий пакет на 1003 на порт 1004 (и обратно для исходящих пакетов). Второе правило фактически разрешает этому транслированному пакету достичь локального процесса.