IPTables - порт на інший ip & порт (зсередини)


10

В даний час у мене є блок NAS, який працює під портом 80. Для доступу до NAS зовні, я зіставив порт 8080 на порт 80 в NAS так:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.32.25.2:80

Це працює як шарм. Однак це працює лише в тому випадку, якщо я заходжу на веб-сайт із зовнішньої мережі (на роботі, в іншому будинку тощо). Тож коли я mywebsite.com:8080набираю текст, IPTables виконує роботу правильно, і все працює нормально.

Тепер у мене проблема полягає в тому, як я можу перенаправити цей порт зсередини мережі? Моє доменне ім’я mywebsite.comвказує на мій маршрутизатор (мій сервер Linux) зсередини (10.32.25.1), але я хочу перенаправити порт 8080 на порт 80 10.32.25.2 зсередини.

Якась підказка?

Редагувати №1

Намагаючись полегшити це питання, я склав цю діаграму. Будь ласка, не соромтеся оновити, якщо це невірно або неправильно представлено те, що ви шукаєте.

                                 iptables
                                     |                   .---------------.
    .-,(  ),-.                       v               port 80             |
 .-(          )-.        port 8080________               |               |
(    internet    )------------>[_...__...°]------------->|      NAS      |
 '-(          ).-'     10.32.25.2    ^   10.32.25.1      |               |
     '-.( ).-'                       |                   |               |
                                     |                   '---------------'
                                     |
                                     |
                                   __  _ 
                                  [__]|=|
                                  /::/|_|

@slm Рівно. Нічого не трапиться 10.32.25.2:8080, оскільки сервер знаходиться на порту 80. Ззовні NAT перенаправляється з порту 8080 на порт 80 за вказаним IP (10.32.25.2). NET -> NAT: 8080 -> 10.32.25.2:80. Мені потрібно правило зсередини, і я не знаю, що туди поставити.
Девід Белангер

@slm Так. Я не знаю, як я можу досягти чогось такого. Я хочу сказати 10.32.25.1:8080переспрямування 10.32.25.2:80. Моє правило вище працює ззовні, але не зсередини моєї мережі. Тож якщо я в офісі, я можу отримати доступ до свого NAS з веб-сайту.com: 8080, і він повністю прозорий. З мого дому, веб-сайт.com: 8080 вказує на 10.32.25.1, тому що це мій маршрутизатор ака-сервер Linux. Я хочу перенаправити порт 8080 на NAS також на порт 80, але знову ж таки прозорим способом.
Девід Белангер

@slm Так, все нормально і працює. Я просто хочу перенаправити порт 10.32.25.1:8080 на 10.32.25.2:80 з внутрішньої мережі.
Девід Белангер

також згадайте про інтерфейс, як eth0 10.32.25.2, щоб ми могли писати використання iptables на основі вхідного інтерфейсу
Рахул Патіл,

Опс вибачте, я щойно бачив .. Ви вже вирішите питання ..
Рахул Патіл

Відповіді:


13

Нарешті я знайшов як робити. По-перше, мені довелося додати -i eth1моє правило "зовні" (eth1 - це моє WAN-з'єднання). Мені також потрібно було додати ще два правила. Ось зрештою, що я прийшов:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 10.32.25.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.32.25.2 --dport 80 -j MASQUERADE

2
Друге правило не є необхідним, оскільки перше правило вже містить, що ...
машинний вирок

1
Перше правило обмежує попередню програму, лише якщо вона надходить на інтерфейс eth1. Друге правило є більш загальним, оскільки воно стосується всіх інтерфейсів. Остерігайтеся петель!
tu-Reinstate Monica-dor duh

4

Ви також забули згадати, що переадресація пакунків повинна бути включена, щоб мати можливість виконувати призначення NAT. За замовчуванням зазвичай це вимкнено, тому правила iptables не працюватимуть. Це можна ввімкнути, видавши:

echo 1 > /proc/sys/net/ipv4/ip_forward

Дякую вам за це, я б годинами витягував волосся!
ColinM

3

Спочатку дозволити переадресацію за допомогою

echo 1 > /proc/sys/net/ipv4/ip_forward

Потім встановіть правила iptable за допомогою

IF=eth1
PORT_FROM=8080
PORT_TO=80
DEST=10.32.25.2
iptables -t nat -A PREROUTING -i $IF -p tcp --dport $PORT_FROM -j DNAT --to $DEST:$PORT_TO
iptables -t nat -A POSTROUTING -p tcp -d $DEST --dport $PORT_TO -j MASQUERADE

Ви можете розмістити ці рядки, /etc/rc.localнаприклад. Примітка: оскільки Debian Джессі робить його виконуваним і включив послугу rc.local через

systemctl enable rc-local.service

0

Спочатку потрібно переконатися, що переадресація активована:

cat /proc/sys/net/ipv4/ip_forward

Якщо ні 1, бігайте echo 1 > /proc/sys/net/ipv4/ip_forward.

Якщо ви хочете, щоб трафік 10.32.25.1 на портах 80 і 443 пересилався до 80порту 10.32.25.2, тоді слід скористатися наведеним нижче правилом:

iptables -t nat -A PREROUTING -d 10.32.25.1 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.32.25.2:80
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.