Переадресация портов в iptables с DNAT


alexu аватар

alexu - Posted on 11 Январь 2006

Задача: нужно сделать переадресацию с определённого ip порта 6669 на другой ip, только на порт 6667:

Решение:
iptables -t nat -A PREROUTING -s 192.168.62.0/24 -d 192.168.100.14 -p tcp --dport 6669 -j DNAT --to-destination 192.168.62.1:6667

0
Ваша оценка: Ничего

ну вообще, ИМХО, конечно, но DNAT в данном примере использован не совсем по назначениею, тем более что есть более так сказать "идеологически правильный" метод перенаправления портов:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

> ну вообще, ИМХО, конечно, но DNAT в данном примере
> использован не совсем по назначениею

Хм. А какое тогда назначение у DNAT?

> тем более что есть более так сказать "идеологически
> правильный" метод перенаправления портов:

>iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

'REDIRECT' можно использовать при перенаправлении портов _только_ на локальной машине. Сделать так, как это описано в совете (перенаправить с одного адреса на другой), с REDIRECT не получится.

Сделал, как написано тут, iptables при restart выдает Failed.

а что такое iptables restart? можно поподробнее? и что конкретно сделано "как здесь"?

делал когда то, не до конца оформлен но какой есть Ж:-)

#!/bin/sh
# port forward by ramok@core.org.ua
#
# limitation: only 1 connection
#
# TODO: parse parametrs
# TODO: check netcat exist
# TODO: make daemon

FIFO=/tmp/`basename $0`.$$

LOCAL_PORT=12345
REMOTE_HOST=ya.ru
REMOTE_PORT=80

#for debug
#set -x
#DEBUG_FLAGS=-vvv

test -p $FIFO || mkfifo $FIFO

trap "rm $FIFO;exit" INT QUIT HUP TERM

while :; do
nc $DEBUG_FLAGS -l -p $LOCAL_PORT < $FIFO | nc $DEBUG_FLAGS $REMOTE_HOST $REMOTE_PORT > $FIFO
done

rm $FIFO

--
Signature invent in progress 19% #.........

ssh -L 192.168.100.14:6669:192.168.62.1:6667 localhost

залогиниваемся и все Ж:-)

ps
понятно что без прав рута переадресовать можно только локальные порты меньше 1024

pss
в старых версиях ssh нельзя было указать внешний IP, так что незабываем обновлятся Ж;-)

---
Signature invent in progress 18% #.........

переброс порта можно сделать и xinetd.
service ibank443
{
disable = no
type = UNLISTED
port = 443
socket_type = stream
protocol = tcp
wait = no
user = root
redirect = 192.168.0.166 443
bind = внешний_IP
# no_access = 62.105.0.0/24
}