Как сделать переадресацию / перенаправление портов в Debian?
У меня два вопроса.
Вопрос 1: Мой компьютер с Debian имеет интерфейс eth3 с ip 192.168.57.28. Если кто-то пытается подключиться к 192.168.57.28:1234, как мне перенаправить запрос на другой компьютер: 192.168.57.25:80?
Вопрос 2: Если у моей машины Debian два интерфейса: eth3 с 192.168.57.28 и ppp0 с некоторым динамическим IP, и кто-то пытается подключиться через ppp0 через порт 1234, как мне перенаправить запрос на 192.168.57.25:80?
Я попробовал это:
$ iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
$ echo 1 > /proc/sys/net/ipv4/ip_forward
но это не работает
2 ответа
iptables -A PREROUTING -t nat -i eth3 -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
iptables -A FORWARD -p tcp -d 192.168.57.25 --dport 80 -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.57.25 -o eth3 -j MASQUERADE
Первый указывает, что все входящие tcp-соединения с портом 1234 должны быть отправлены на порт 80 внутренней машины 192.168.57.25. Одно только это правило не завершает работу, потому что iptables запрещает все входящие соединения. Затем мы принимаем входящее соединение на порт 1234 от eth3, который подключается к Интернету с опубликованным IP по второму правилу. Мы добавляем второе правило в цепочку FORWARD, чтобы разрешить пересылку пакетов на порт 80 из 192.168.57.25.
РЕДАКТИРОВАТЬ: добавлено POSTROUTING.
Чтобы отслеживать соединение. в противном случае внешний хост увидит внутренний IP 192.168.57.25, о котором он понятия не имеет.
РЕДАКТИРОВАТЬ 2: Просто получил подсказку, что это должно быть - к месту назначения вместо - к (Sry)
Спасибо Дейуокеру и Даньялу Салбергу Адлерссону. После нескольких часов ругательства, наконец, работает переадресация портов с iptables. (проверено на Debian)
баш-скрипт
#!/bin/bash
IPTBL=/sbin/iptables
IF_IN=eth0
PORT_IN=40022
IP_OUT=172.16.93.128
PORT_OUT=22
echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPTBL -A FORWARD -p tcp -d $IP_OUT --dport $PORT_OUT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE