Как сделать переадресацию / перенаправление портов в Debian?

12

У меня два вопроса.

Вопрос 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

но это не работает

Данжал Салберг Адлерссон
источник

Ответы:

12
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)

Бодрствующий
источник
Я попробовал ваше предложение, но оно не работает. Я могу перейти к 192.168.57.25, и веб-страница возвращается, но просмотр к 192.168.57.28:1234 не работает.
Данджал Салберг Адлерссон
@ DánjalSalbergAdlersson Обновил мой пост (что-то пропустил. Sry.)
Daywalker
3
Я попробовал ваше предложение, но оно не сработало. Затем я перехожу на последнюю: iptables -A POSTROUTING -t nat -j MASQUERADE, тогда это сработало!
Данджал Салберг Адлерссон
8

Спасибо Дейуокеру и Даньялу Салбергу Адлерссону. После нескольких часов ругательства, наконец, работает переадресация портов с 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
scotty86
источник
есть ли причина, по которой "-s 192.168.57.25" был опущен в строке POSTROUTING?
edwardsmarkf
также "-o eth3" опущено
edwardsmarkf
я вижу -s и -o в строке POSTROUTING кажется необязательным. какие-либо мысли об использовании SSL? я задал вопрос здесь, ссылаясь на ваш сценарий: superuser.com/questions/1387902/…
edwardsmarkf