Як зробити переадресацію / переадресацію портів на 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-файлу publich за другим правилом. Додамо друге правило у ланцюжку FORWARD, щоб дозволити переадресацію пакетів на порт 80 192.168.57.25.

РЕДАКТУВАННЯ : додано розсилку.

Щоб слідкувати за з'єднанням. інакше зовнішній хост побачить внутрішній IP 192.168.57.25, про який він не має жодного поняття.

EDIT2: Щойно отримав підказку, що це має бути --to призначення, а не --to (sry)


Я спробував вашу пропозицію, але це не працює. Я можу переглядати до 192.168.57.25, і веб-сторінка повертається, але перегляд до 192.168.57.28:1234 не працює.
Даньял Сальберг Адлерссон

@ DánjalSalbergAdlersson Оновлено мою публікацію (щось пропустив. Sry.)
Daywalker

3
Я спробував вашу пропозицію, але не вийшло. Потім я переходжу до останнього до цього: iptables -A РОЗМІСТАННЯ -t nat -j MASQUERADE, тоді воно працювало!
Даньял Сальберг Адлерссон

8

Завдяки Дейволкеру та Даньялу Сальбергу Адлерссон. Після годинної лайливості, пересилання портів з iptables нарешті працює. (тестовано на Debian)

bash-скрипт

#!/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

Чи є якась причина, чому "-s 192.168.57.25" було пропущено з рядка POSTROUTING?
edwardsmarkf

також "-o eth3" опущено
edwardsmarkf

я бачу -s та -o у рядку POSTROUTING здається необов’язковим. якісь думки щодо використання SSL? Я задав тут питання, посилаючись на ваш сценарій: superuser.com/questions/1387902/…
edwardsmarkf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.