Перенаправление трафика (Переадресация пакетов средствами iptables)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

baki
Сообщения: 12
ОС: Linux Mandriva 2007

Перенаправление трафика

Сообщение baki »

Здравствуйте. У меня следующая проблема: имеется linux-роутер (host1), необходимо все пакеты, приходящие на tcp порт 8880 этого роутера перенаправить на другой адрес в интернете (host2) на порт 80. Почитал маны, погуглил, нашёл что необходимо добавить два правила в iptables:

Код: Выделить всё

iptables -t nat -A PREROUTING -i vlan1 -d host1 -p tcp --dport 8880 -j DNAT --to-destination host2:80
iptables -t nat -A POSTROUTING -o vlan1 -s host2 -p tcp --sport 80 -j SNAT --to-source host1:8880

Однако после добавления этих правил в роутер перенаправление трафика так и не заработало. Подскажите пожалуйста, в чём я ошибся (какие нужны правила)?
Спасибо сказали:
ford1813
Сообщения: 383
ОС: Slackware

Re: Перенаправление трафика

Сообщение ford1813 »

baki писал(а):
28.07.2009 10:38
Здравствуйте. У меня следующая проблема: имеется linux-роутер (host1), необходимо все пакеты, приходящие на tcp порт 8880 этого роутера перенаправить на другой адрес в интернете (host2) на порт 80. Почитал маны, погуглил, нашёл что необходимо добавить два правила в iptables:

Код: Выделить всё

iptables -t nat -A PREROUTING -i vlan1 -d host1 -p tcp --dport 8880 -j DNAT --to-destination host2:80
iptables -t nat -A POSTROUTING -o vlan1 -s host2 -p tcp --sport 80 -j SNAT --to-source host1:8880

Однако после добавления этих правил в роутер перенаправление трафика так и не заработало. Подскажите пожалуйста, в чём я ошибся (какие нужны правила)?

iptables-save -c для начала посмотрите. Порядок и счетчики.
Контакты для связи:

E-mail: ford1813@gmail.com

Telegram: @ford1813
Спасибо сказали:
baki
Сообщения: 12
ОС: Linux Mandriva 2007

Re: Перенаправление трафика

Сообщение baki »

Код: Выделить всё

iptables-save -c

Этой утилиты нету, установить на роутер несколько проблематично. Эти правила верные и должны работать?
Спасибо сказали:
ford1813
Сообщения: 383
ОС: Slackware

Re: Перенаправление трафика

Сообщение ford1813 »

baki писал(а):
28.07.2009 11:10

Код: Выделить всё

iptables-save -c

Этой утилиты нету, установить на роутер несколько проблематично. Эти правила верные и должны работать?

iptables -L -nv -t nat

Тогда смори. Должны они работать или нет , видно будет только по порядку правил.
Контакты для связи:

E-mail: ford1813@gmail.com

Telegram: @ford1813
Спасибо сказали:
baki
Сообщения: 12
ОС: Linux Mandriva 2007

Re: Перенаправление трафика

Сообщение baki »

Код: Выделить всё

Chain PREROUTING (policy ACCEPT 84166 packets, 7579K bytes)
 pkts bytes target     prot opt in     out     source               destination
46313 1918K VSERVER    all  --  *      *       0.0.0.0/0            193.169.32.254
    0     0 NETMAP     udp  --  *      *       0.0.0.0/0            193.169.32.254     udp spt:6112 192.168.1.0/24
    0     0 DNAT       tcp  --  vlan1  *       0.0.0.0/0            193.169.32.254     tcp dpt:8880 to:77.88.21.8:80

Chain POSTROUTING (policy ACCEPT 52005 packets, 2372K bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 NETMAP     udp  --  *      *       192.168.1.0/24       0.0.0.0/0          udp dpt:6112 193.169.32.254/32
 9999  724K MASQUERADE  all  --  *      vlan1  !193.169.32.254       0.0.0.0/0
  524 34516 MASQUERADE  all  --  *      br0     192.168.1.0/24       192.168.1.0/24
    0     0 SNAT       tcp  --  *      vlan1   77.88.21.8           0.0.0.0/0          tcp spt:80 to:193.169.32.254:8880

Chain OUTPUT (policy ACCEPT 12235 packets, 738K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain VSERVER (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:25714 to:192.168.1.52:25714
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:25714 to:192.168.1.52:25714
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:5191 to:192.168.1.45:5191
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:14223 to:192.168.1.25:14223
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:14223 to:192.168.1.25:14223
    2   100 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:443 to:192.168.1.25:443
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:443 to:192.168.1.25:443
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:37674 to:192.168.1.25:37674
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:37674 to:192.168.1.25:37674
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:37675 to:192.168.1.25:37675
   51  2360 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:58924 to:192.168.1.235:58924
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:18523 to:82.207.3.29:18523
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:18523 to:82.207.3.29:18523
   18   948 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:58924 to:192.168.1.235:58924
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:25305 to:192.168.1.25:25305
   32  1528 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:21 to:192.168.1.11:21
  734 35224 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:3128 to:192.168.1.11:3128
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:3128 to:192.168.1.11:3128
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:22 to:192.168.1.11:22
 1000 77486 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:14567 to:192.168.1.11:14567
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:23000 to:192.168.1.11:23000
27097  985K DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:23000 to:192.168.1.11:23000
11643  577K DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:80 to:192.168.1.11:80
    8   384 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:14667 to:192.168.1.11:14667
    1   112 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:14569 to:192.168.1.11:14569
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:5222 to:192.168.1.11:5222
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:5222 to:192.168.1.11:5222
    1    60 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:5269 to:192.168.1.11:5269
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:5223 to:192.168.1.11:5223
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:5223 to:192.168.1.11:5223
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:9090 to:192.168.1.11:9090
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:9090 to:192.168.1.11:9090
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:5500 to:192.168.1.25:5500
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:5500 to:192.168.1.25:5500
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:29186 to:192.168.1.25:29186
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:27155 to:192.168.1.53:27155
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:10000 to:192.168.1.11:10000
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:59000 to:192.168.1.11:5900
   22  4576 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:8767 to:192.168.1.11:8767
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:2222 to:192.168.1.11:22
  274 16440 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0          tcp dpt:51234 to:192.168.1.11:51234
    0     0 DNAT       udp  --  *      *       0.0.0.0/0            0.0.0.0/0          udp dpt:51234 to:192.168.1.11:51234
 5430  216K DNAT       all  --  *      *       0.0.0.0/0            0.0.0.0/0          to:192.168.1.25
Спасибо сказали:
Аватара пользователя
danger08
Сообщения: 715
ОС: Linux (CentOS, Ubuntu)

Re: Перенаправление трафика

Сообщение danger08 »

baki писал(а):
28.07.2009 10:38
Здравствуйте. У меня следующая проблема: имеется linux-роутер (host1), необходимо все пакеты, приходящие на tcp порт 8880 этого роутера перенаправить на другой адрес в интернете (host2) на порт 80. Почитал маны, погуглил, нашёл что необходимо добавить два правила в iptables:

Код: Выделить всё

iptables -t nat -A PREROUTING -i vlan1 -d host1 -p tcp --dport 8880 -j DNAT --to-destination host2:80
iptables -t nat -A POSTROUTING -o vlan1 -s host2 -p tcp --sport 80 -j SNAT --to-source host1:8880

Однако после добавления этих правил в роутер перенаправление трафика так и не заработало. Подскажите пожалуйста, в чём я ошибся (какие нужны правила)?


Если точно так, как вы описали:

Код: Выделить всё

iptables -t nat -A PREROUTING -i vlan1 -d host1 -p tcp --dport 8880 -j DNAT --to-destination host2:80
iptables -t nat -A POSTROUTING -o external-interface -j SNAT --to-source host1
iptables -t nat -A POSTROUTING -i external-interface -o vlan1 -s host2 -p tcp --sport 80 -j SNAT --to-source host1

iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -i vlan1 -o external-interface -d host2 -p tcp --dport 80 -j ACCEPT

При этом учитывайте, что IP-адреса на host1 надо ставить соотвественно интерфейса (host1 имеет несколько адресов).

Вообще, вопрос конечно: а есть ли необходимость перекидывать порты с роутера на удаленный хост? Может, проще роутинг настроить, и разрешить форвард на 80-й порт хоста host2 из локалки, находящейся за host1 ?
Блогосайт - http://www.fateyev.com
Спасибо сказали:
baki
Сообщения: 12
ОС: Linux Mandriva 2007

Re: Перенаправление трафика

Сообщение baki »

Вы наверное не поняли. Задача перенаправлять пакеты не из локалки а из интернета. Какой-то пользователь из интернета хочет подключится на порт 8880, необходимо перенаправить пакет на другой сервер в интернете. Роутинг тут не поможет.
Спасибо сказали:
Аватара пользователя
danger08
Сообщения: 715
ОС: Linux (CentOS, Ubuntu)

Re: Перенаправление трафика

Сообщение danger08 »

baki писал(а):
28.07.2009 12:15
Вы наверное не поняли. Задача перенаправлять пакеты не из локалки а из интернета. Какой-то пользователь из интернета хочет подключится на порт 8880, необходимо перенаправить пакет на другой сервер в интернете. Роутинг тут не поможет.

значит, помогут те правила, которые я привел.
Блогосайт - http://www.fateyev.com
Спасибо сказали:
baki
Сообщения: 12
ОС: Linux Mandriva 2007

Re: Перенаправление трафика

Сообщение baki »

Код: Выделить всё

iptables -t nat -A POSTROUTING -i external-interface -o vlan1 -s host2 -p tcp --sport 80 -j SNAT --to-source host1

данную строку он не принимает из-за -i external-interface (-i vlan1):

Код: Выделить всё

iptables v1.2.7a: Can't use -i with POSTROUTING

Поэтому заменил её на:

Код: Выделить всё

iptables -t nat -A POSTROUTING -o vlan1 -s host2 -p tcp --sport 80 -j SNAT --to-source host1

Остальные правила добавил, однако трафик по прежнему не проходит.
Спасибо сказали:
Аватара пользователя
skeletor
Сообщения: 1224

Re: Перенаправление трафика

Сообщение skeletor »

Используй утилиту redir. Она как раз делает то, что нужно: тупо перенаправляет (не так как iptables натит их, потом перенаправляет, ...).
Спасибо сказали:
baki
Сообщения: 12
ОС: Linux Mandriva 2007

Re: Перенаправление трафика

Сообщение baki »

а для udp redir работает? Если нет, то существует-ли что-то подобное для udp?
Спасибо сказали:
Аватара пользователя
skeletor
Сообщения: 1224

Re: Перенаправление трафика

Сообщение skeletor »

Нет, она только для tcp. Для udp есть другая uredir (http://www.opennet.ru/prog/info/344.shtml)
Спасибо сказали:
baki
Сообщения: 12
ОС: Linux Mandriva 2007

Re: Перенаправление трафика

Сообщение baki »

urefid очень старая и не устанавливается. Есть-ли альтернатива (всё-таки как-то организовать через iptables, или другая программа для перенаправления udp трафика)?
Спасибо сказали:
Аватара пользователя
skeletor
Сообщения: 1224

Re: Перенаправление трафика

Сообщение skeletor »

Почитай вот это.
http://www.linux.org.ru/view-message.jsp?msgid=2793379

Попробуй поставить. Аналогов - не знаю.
Спасибо сказали:
skor
Сообщения: 419
ОС: RTFM-OS v127.0.0.1

Re: Перенаправление трафика

Сообщение skor »

BTW если переправлять надо HTTP трафик, то можно воспользоваться squid или apache/lighttpd/ngnix
Спасибо сказали:
baki
Сообщения: 12
ОС: Linux Mandriva 2007

Re: Перенаправление трафика

Сообщение baki »

Есть-ли ещё какие-то варианты для перенаправления UDP трафика? И всё-же хотелось-бы разобраться почему не работает с iptables?
Спасибо сказали:
skor
Сообщения: 419
ОС: RTFM-OS v127.0.0.1

Re: Перенаправление трафика

Сообщение skor »

А такие правила попробовать?
iptables -t nat -I PREROUTING -d host1 -p udp --dport port1 -j DNAT --to-destination host2:port2
iptables -t nat -I POSTROUTING -d host2 -p udp --dport port2 -j SNAT --to-source host1
iptables -t filter -I FORWARD -d host2 -j ACCEPT
iptables -t filter -I FORWARD -s host2 -j ACCEPT
iptables -t filter -I FORWARD -d host1 -j ACCEPT
iptables -t filter -I FORWARD -s host1 -j ACCEPT

PS: а что за UDP траффик? tcpdump`ом смотрели, что приходит? что уходит?
Спасибо сказали:
baki
Сообщения: 12
ОС: Linux Mandriva 2007

Re: Перенаправление трафика

Сообщение baki »

Код: Выделить всё

iptables -t nat -I PREROUTING -d host1 -p udp --dport port1 -j DNAT --to-destination host2:port2
iptables -t nat -I POSTROUTING -d host2 -p udp --dport port2 -j SNAT --to-source host1
iptables -t filter -I FORWARD -d host2 -j ACCEPT
iptables -t filter -I FORWARD -s host2 -j ACCEPT
iptables -t filter -I FORWARD -d host1 -j ACCEPT
iptables -t filter -I FORWARD -s host1 -j ACCEPT

Опять-же эффекта 0.
Спасибо сказали:
ford1813
Сообщения: 383
ОС: Slackware

Re: Перенаправление трафика

Сообщение ford1813 »

cat /proc/sys/net/ipv4/ip_forward
1

Случайно не нужен ? Или я того)
Контакты для связи:

E-mail: ford1813@gmail.com

Telegram: @ford1813
Спасибо сказали:
skor
Сообщения: 419
ОС: RTFM-OS v127.0.0.1

Re: Перенаправление трафика

Сообщение skor »

Ну надеемся что форвардинг все же включен... иначе бы SNAT/DNAT вобоще не работал и это думаю заметили бы...
вот здесь http://www.debian-administration.org/artic...ables_tcp_proxy в правилах еще фигурирует -t nat -A OUTPUT
Попробуйте добавить правило:
iptables -t nat -I OUTPUT -d host1 -p udp --dport port1 -j DNAT --to-destination host2:port2
Спасибо сказали: