URL: https://ssl.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 5318
[ Назад ]

Исходное сообщение
"iptables сломался проброс портов"

Отправлено zdlr , 22-Мрт-15 16:01 
Друзья выручайте.

Ситуация такая: Поменял материнскую плату на Убунту сервер. Все заработало кроме проброса портов, которые работают как то не так как нужно.

На сервере настроен NAT, на натом стоит сервер с RDP, на него делался проброс портов.

Делалось это так:

sudo iptables -A FORWARD -i eth0 -p tcp --dport 3389 -j ACCEPT
sudo iptables -t nat -A PREROUTING -p tcp -d 123.123.123.123 --dport 3389 -j DNAT --to-destination 192.168.0.100:3389
sudo iptables -t nat -A POSTROUTING -p tcp --dst 192.168.0.100 --dport 3389 -j SNAT --to-source 123.123.123.123

Теперь ситуация такая что если из под нат постучаться на внешний адрес 123.123.123.123 и порт 3389 то все работает. А если сделать это снаружи то нет.

Если запустить tcpdump и послушать - то при подключении изнутри пакеты бегают, а при подключении снаружи запрос проиходит и далее во внутрь нет.

14:56:26.793428 IP 46.211.146.228.18598 > 123.123.123.123.3389: Flags [S], seq 1191622352, win 65535, options [mss 1410,nop,wscale 4,nop,nop,TS val 193727049 ecr 0,sackOK,eol], length 0

Подобную тему тут на форуме поднимал пользователь, но решения нет. Но ему написали интересное замечание, какое касается видно и меня.

Ему написали:

"> -A FORWARD -i eth0 -p tcp -m tcp --dport 8000 -j ACCEPT

но в форварде нет разрешающего правила , которое бы разрешало трафик извне на внутренний ip/порт"

У меня такое же правило судя по iptables-save:

# Generated by iptables-save v1.4.21 on Sun Mar 22 15:01:20 2015
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -m state --state NEW -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1234 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 2345 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p gre -j ACCEPT
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -p udp -m udp --sport 1701 -j ACCEPT
-A FORWARD -i eth0 -p tcp -m tcp --dport 3389 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p gre -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -j ACCEPT
COMMIT
# Completed on Sun Mar 22 15:01:20 2015
# Generated by iptables-save v1.4.21 on Sun Mar 22 15:01:20 2015
*mangle
:PREROUTING ACCEPT [1164363:1182988541]
:INPUT ACCEPT [1120962:1154843012]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [568929:549337025]
:POSTROUTING ACCEPT [612457:577497932]
-A FORWARD -j ACCEPT
COMMIT
# Completed on Sun Mar 22 15:01:20 2015
# Generated by iptables-save v1.4.21 on Sun Mar 22 15:01:20 2015
*nat
:PREROUTING ACCEPT [61:7854]
:INPUT ACCEPT [61:7854]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -d 123.123.123.123/32 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.100:3389
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -d 192.168.0.100/32 -p tcp -m tcp --dport 3389 -j SNAT --to-source 123.123.123.123
COMMIT
# Completed on Sun Mar 22 15:01:20 2015


Друзья выручайте.


Содержание

Сообщения в этом обсуждении
"iptables сломался проброс портов"
Отправлено PavelR , 22-Мрт-15 16:35 
sysctl -a |grep forward

?


"iptables сломался проброс портов"
Отправлено zdlr , 22-Мрт-15 18:05 
> sysctl -a |grep forward
> ?

Если честно у меня только что сдали уже нервы и я не стал продолжать эксперименты так как утром нужна рабочая система и поставил старую плату назад. И все заработало.

Смотрите еще какая ситуация.

На старой плате у меня было 3 сетевые карты. Этот сервер на который делался проброс висел на одной из них и небыл доступен из офиса. Только снаружи. А в новой материнской плате только одно гнездо посадочное для сетевой, итого карт стало две. Изначально я сделал виртуальный интерфейс, и все стало визуально как было. На сервере RDP появился интернет, заработал проброс (как потом выяснилось только для меня). Потом я этот виртуальный интерфейс удалил, сервер перевел в туже подсеть, где нашел в настройка iptables поменял все упоминания на новый адрес. И опять же все заработало только для меня.

Сейчас я вернул все назад, чтоб уже не рисковать сегодня. И оно без проблем заработало моментально.

Ответ то что вы просили на данный момент:

net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.eth0.forwarding = 1
net.ipv4.conf.eth0.mc_forwarding = 0
net.ipv4.conf.eth1.forwarding = 1
net.ipv4.conf.eth1.mc_forwarding = 0
net.ipv4.conf.eth2.forwarding = 1
net.ipv4.conf.eth2.mc_forwarding = 0
net.ipv4.conf.lo.forwarding = 1
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.mc_forwarding = 0
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.default.mc_forwarding = 0
net.ipv6.conf.eth0.forwarding = 1
net.ipv6.conf.eth0.mc_forwarding = 0
net.ipv6.conf.eth1.forwarding = 1
net.ipv6.conf.eth1.mc_forwarding = 0
net.ipv6.conf.eth2.forwarding = 1
net.ipv6.conf.eth2.mc_forwarding = 0
net.ipv6.conf.lo.forwarding = 1
net.ipv6.conf.lo.mc_forwarding = 0


"iptables сломался проброс портов"
Отправлено ALex_hha , 22-Мрт-15 17:55 
во всех цепочках дефолтная политика ACCEPT. Какой смысл в разрешающих правилах?

"iptables сломался проброс портов"
Отправлено zdlr , 22-Мрт-15 17:58 
>> Теперь ситуация такая что если из под нат постучаться на внешний адрес 123.123.123.123 и порт 3389 то все работает.
> из под NAT на внешний адрес? Это как?

Ну как, сижу я на 192.168.0.10, а сервер на 192.168.0.100 - если так на 192.168.0.100 зайти то как бы я считаю изнутри и без всяких пробросов, но если я постучусь 123.123.123.123 то как бы на внешний же адрес пробую зайти и все работает, проброс порта есть. Я даже его отключал чтоб удостовериться что проброс есть или нет в зависимости от того включил я его или нет.


"iptables сломался проброс портов"
Отправлено zdlr , 22-Мрт-15 18:08 
> во всех цепочках дефолтная политика ACCEPT. Какой смысл в разрешающих правилах?

Если честно я не очень большой специалист по iptables, сам как бы там не лазал никогда, сервер уже работает лет 5. Все что я делал если настраиваил по статьям, и так оно и вышло видимо. Причин не знаю о чем вы говорите.


"iptables сломался проброс портов"
Отправлено Etch , 22-Мрт-15 17:58 
> Ситуация такая: Поменял материнскую плату

Проверьте названия сетевых интерфейсов, наверняка они поменялись местами.


"iptables сломался проброс портов"
Отправлено zdlr , 22-Мрт-15 18:09 
>> Ситуация такая: Поменял материнскую плату
> Проверьте названия сетевых интерфейсов, наверняка они поменялись местами.

Проверял, да, изначально новая карта определась неверно. Но я в  /etc/udev/rules.d/70-persistent-net.rules исправил это. Стало как и было eth0 в мир eth1 внутрь.


"iptables сломался проброс портов"
Отправлено aaa , 23-Мрт-15 14:26 
>[оверквотинг удален]
> :POSTROUTING ACCEPT [0:0]
> -A PREROUTING -d 123.123.123.123/32 -p tcp -m tcp --dport 3389 -j DNAT
> --to-destination 192.168.0.100:3389
> -A POSTROUTING -o eth0 -j MASQUERADE
> -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
> -A POSTROUTING -d 192.168.0.100/32 -p tcp -m tcp --dport 3389 -j SNAT
> --to-source 123.123.123.123
> COMMIT
> # Completed on Sun Mar 22 15:01:20 2015
> Друзья выручайте.

Важен порядок правил у Вас стоит:
-A FORWARD -i eth0 -o eth1 -j REJECT --reject-with icmp-port-unreachable  - отбрасывает все пакеты не попавшие под правила выше.
-A FORWARD -p udp -m udp --sport 1701 -j ACCEPT
-A FORWARD -i eth0 -p tcp -m tcp --dport 3389 -j ACCEPT - до сюда пакеты не доходят
Надо поменять местами. Или написать:
iptables -I FORWARD -i eth0 -p tcp -m tcp --dport 3389 -j ACCEPT


"iptables сломался проброс портов"
Отправлено izyk , 24-Мрт-15 14:57 
> Друзья выручайте.

Уберите:
sudo iptables -t nat -A POSTROUTING -p tcp --dst 192.168.0.100 --dport 3389 -j SNAT --to-source 123.123.123.123

затем настройте правильно маршрутизацию в сети, firewall на Windows который 192.168.0.100, а может и так заработает.
У вас случаем не две сети на одном интерфейсе?