PDA

Bekijk de volledige versie : Помогите решить проблему портмаппинга!



laz
06-01-2009, 19:33
Уважаемые Гуру!
Я в Линухе ламер и прошу вашей помощи...
Суть такая: Мне нужно реализовать на роутере Asus wl500gp прием пакетов из иннета по 80 порту и перенаправлять их снова в иннет но на порт, например 4000.
Спасибо!

theMIROn
06-01-2009, 20:17
#!/bin/sh
SPORT=80
DIP=xxx.xxx.xxx.xxx
DPORT=4000
LANIF=`nvram get lan_ifname`
iptables -t nat -I PREROUTING 1 -i ! ${LANIF} --dport ${SPORT} -j DNAT --to-destination ${DIP}:${DPORT}
iptables -t nat -I POSTROUTING 1 -o ! ${LANIF} --source ${DIP} -j MASQUERADE

если ничего не напутал, то должно сработать

laz
06-01-2009, 21:03
#!/bin/sh
SPORT=80
DIP=xxx.xxx.xxx.xxx
DPORT=4000
LANIF=`nvram get lan_ifname`
iptables -t nat -I PREROUTING 1 -i ! ${LANIF} --dport ${SPORT} -j DNAT --to-destination ${DIP}:${DPORT}
iptables -t nat -A POSTROUTING -o ! ${LANIF} --source ${DIP} -j MASQUERADE

если ничего не напутал, то должно сработать

Спасибо!!! Только одно но! Я же сказал, что тупой... а куда это все писать, в какой файл?

theMIROn
06-01-2009, 22:08
в любой, например в /usr/local/sbin/post-firewall
сделать его исполняемым chmod +x /usr/local/sbin/post-firewall
проверить (запустив), и, если все ок, сохранить во флеше
flashfs save
flashfs commit
flashfs enable

all-x
06-01-2009, 22:11
Писать в /usr/local/sbin/post-firewall

Если этот файл уже существует - дописать в него все, кроме первой строки #!/bin/sh

Если файла не было - сделать его исполнимым

chmod a+x /usr/local/sbin/post-firewall

Сохранить изменения

flashfs save && flashfs commit && flashfs enable

Перезагрузить роутер

reboot

all-x
06-01-2009, 22:12
Ну ведь специально перед тем, как отвечать, проверил, что никто не опередил :) Ну и ладно, зато у меня правильнее - /usr/local/post-firewall автоматом не запустится, надо /usr/local/sbin/post-firewall

laz
06-01-2009, 22:14
Ну ведь специально перед тем, как отвечать, проверил, что никто не опередил :)

Спасибо всем Гуру!!!
попробую, может прокатит...:)

laz
07-01-2009, 08:51
Спасибо всем Гуру!!!
попробую, может прокатит...:)

Не получается!!! Гуру расшифруйте пожалуйста 2 последние строки с iptable. Может сам докумекаю что к чему...:confused:

2bars
07-01-2009, 09:32
ИМХО SNAT легче Макскарада

all-x
07-01-2009, 09:35
Я не гуру, но колеса попинать могу :)

Вместо
DIP=xxx.xxx.xxx.xxx
надо подставить внешний ip адрес роутера. Сделано?

laz
07-01-2009, 09:41
ИМХО SNAT легче Макскарада

Уф! Ребята попытаюсь объяснить суть... Может меня не правильно поняли?

Из корпоративной сети я могу работать только по двум портам 80 и 443!
Я хочу по этой сетке получать шару+++. Обычно она раздается по 4000 порту. Так вот, что я думаю. У меня белый ip дома и стот ройтер wl500gp. Хочу из корпоративной сети обращаться к роутеру по одному из выше указанных портов и чтобы роутер перенаправлял запросы на сервер шары с портом 4000.

laz
07-01-2009, 09:43
Я не гуру, но колеса попинать могу :)

Вместо
DIP=xxx.xxx.xxx.xxx
надо подставить внешний ip адрес роутера. Сделано?
Конечно, но ни хрена не пашет...:( Блин я ставил адрес шары!!!

theMIROn
07-01-2009, 09:59
Конечно, но ни хрена не пашет...:( Блин я ставил адрес шары!!!
и правилно делал.
замени во второй строчке "iptables -t nat -A POSTROUTING" на "iptables -t nat -I POSTROUTING 1"
после того как запустишь, сделай iptables -t nat -nL и выложи сюда

p.s если код будет в post-firewal


#!/bin/sh
SPORT=80
DIP=xxx.xxx.xxx.xxx
DPORT=4000
iptables -t nat -I PREROUTING 1 -i $2 -d $1 --dport ${SPORT} -j DNAT --to-destination ${DIP}:${DPORT}
iptables -t nat -I POSTROUTING -o $2 -s ${DIP} -j SNAT --to-source $1
iptables -I FORWARD 1 -d ${DIP} --dport ${DPORT} -j ACCEPT

all-x
07-01-2009, 10:15
Да, с DIP я наврал :( Конечно, это адрес шары, а не роутера.
А с какого адреса ты пытаешься проверять? Насколько я понимаю, надо не из локалки, а снаружи.

laz
07-01-2009, 10:16
и правилно делал.
замени во второй строчке "iptables -t nat -A POSTROUTING" на "iptables -t nat -I POSTROUTING 1"
после того как запустишь, сделай iptables -t nat -nL и выложи сюда

[admin@Asus_router root]$ iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
VSERVER all -- 0.0.0.0/0 192.168.33.240
VSERVER all -- 0.0.0.0/0 172.31.48.241
autofw tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20 autofw tcp dpt:20 to:20
autofw tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 autofw tcp dpt:21 to:21

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- !192.168.33.240 0.0.0.0/0
MASQUERADE all -- !172.31.48.241 0.0.0.0/0
MASQUERADE all -- 192.168.1.0/24 192.168.1.0/24

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain VSERVER (2 references)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3333 to:192.168.1.1:80
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:4899 to:192.168.1.3:4899
DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:4899 to:192.168.1.3:4899
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:20:21 to:192.168.1.1:20
[admin@Asus_router root]$

laz
07-01-2009, 10:19
File: post-firewall Col 0 367 bytes 100%
#!/bin/sh
iptables -I INPUT -p tcp --dport 51778 -j ACCEPT
iptables -I SECURITY -p udp --dport 16049:16051 -j RETURN
SPORT=443
DIP=62.141.52.195
DPORT=4000
LANIF=`nvram get lan_ifname`
iptables -t nat -I PREROUTING 1 -i ! ${LANIF} --dport ${SPORT} -j DNAT --to-dest
ination ${DIP}:${DPORT}
iptables -t nat -A POSTROUTING 1 -o ! ${LANIF} --source ${DIP} -j MASQUERADE

laz
07-01-2009, 10:21
Да, с DIP я наврал :( Конечно, это адрес шары, а не роутера.
А с какого адреса ты пытаешься проверять? Насколько я понимаю, надо не из локалки, а снаружи.

Для начала я проверяю наличие открытого порта через сервер http://www.canyouseeme.org/ Если там я не вижу его доступным, то далее нет смысла ковырять...

laz
07-01-2009, 10:51
Все сделал как писали и вот что получил



File: post-firewall Col 0 418 bytes 100%
#!/bin/sh
iptables -I INPUT -p tcp --dport 51778 -j ACCEPT
iptables -I SECURITY -p udp --dport 16049:16051 -j RETURN
SPORT=443
DIP=62.141.52.195
DPORT=4000
LANIF=`nvram get lan_ifname`
iptables -t nat -I PREROUTING 1 -i $2 -d $1 --dport ${SPORT} -j DNAT --to-destin
ation ${DIP}:${DPORT}
iptables -t nat -I POSTROUTING -o $2 -s ${DIP} -j SNAT --to-source $1
iptables -I FORWARD 1 -d ${DIP} --dport ${DPORT} -j ACCEPT




[admin@Asus_router root]$ iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
VSERVER all -- 0.0.0.0/0 192.168.33.240
VSERVER all -- 0.0.0.0/0 172.31.48.241
autofw tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20 autofw tc p dpt:20 to:20
autofw tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 autofw tc p dpt:21 to:21

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- !192.168.33.240 0.0.0.0/0
MASQUERADE all -- !172.31.48.241 0.0.0.0/0
MASQUERADE all -- 192.168.1.0/24 192.168.1.0/24

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain VSERVER (2 references)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3333 to:192. 168.1.1:80
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:4899 to:192. 168.1.3:4899
DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:4899 to:192. 168.1.3:4899
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:20:21 to:19 2.168.1.1:20
[admin@Asus_router root]$

Power
07-01-2009, 10:56
Протокол! Протокол кто указывать будет?


#!/bin/sh
SPORT=80
DIP=xxx.xxx.xxx.xxx
DPORT=4000
WAN_IFACE=$1
WAN_IP=$2

iptables -t nat -I PREROUTING 1 -i $WAN_IFACE -d $WAN_IP -p tcp --dport ${SPORT} -j DNAT --to-destination ${DIP}:${DPORT}
iptables -I FORWARD 1 -d ${DIP} -p tcp --dport ${DPORT} -m conntrack --ctstate DNAT -m state --state NEW -j ACCEPT
iptables -t nat -I POSTROUTING 1 -o $WAN_IFACE -d ${DIP} -j SNAT --to-source $WAN_IP


Да, и вместо "iptables -t nat -nL" лучше писать "iptables -t nat -nvL".

И если вы post-firewall запускаете ручками, передайте ему аргументы: первый - имя внешнего интерфейса, второй - внешний айпи.

laz
07-01-2009, 11:06
Протокол! Протокол кто указывать будет?


#!/bin/sh
SPORT=80
DIP=xxx.xxx.xxx.xxx
DPORT=4000
WAN_IFACE=$1
WAN_IP=$2

iptables -t nat -I PREROUTING 1 -i $WAN_IFACE -d $WAN_IP -p tcp --dport ${SPORT} -j DNAT --to-destination ${DIP}:${DPORT}
iptables -I FORWARD 1 -d ${DIP} -p tcp --dport ${DPORT} -m conntrack --ctstate DNAT -m state --state NEW -j ACCEPT
iptables -t nat -I POSTROUTING 1 -o $WAN_IFACE -d ${DIP} -j SNAT --to-source $WAN_IP


Да, и вместо "iptables -t nat -nL" лучше писать "iptables -t nat -nvL".

И если вы post-firewall запускаете ручками, передайте ему аргументы: первый - имя внешнего интерфейса, второй - внешний айпи.


уже лучше! Вижу открытый порт....
вот лог
[admin@Asus_router root]$ iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 2120 packets, 135K bytes)
pkts bytes target prot opt in out source destination
1 60 DNAT tcp -- ppp0 * 0.0.0.0/0 192.168.33.2 40 tcp dpt:443 to:62.141.52.195:4000
61 4496 VSERVER all -- * * 0.0.0.0/0 192.168.33.2 40
0 0 VSERVER all -- * * 0.0.0.0/0 172.31.48.24 1
0 0 autofw tcp -- br0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:20 autofw tcp dpt:20 to:20
0 0 autofw tcp -- br0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 autofw tcp dpt:21 to:21

Chain POSTROUTING (policy ACCEPT 3 packets, 195 bytes)
pkts bytes target prot opt in out source destination
1 60 SNAT all -- * ppp0 0.0.0.0/0 62.141.52.19 5 to:192.168.33.240
9 432 MASQUERADE all -- * ppp0 !192.168.33.240 0.0.0.0/0
0 0 MASQUERADE all -- * vlan1 !172.31.48.241 0.0.0.0/0
0 0 MASQUERADE all -- * br0 192.168.1.0/24 192.168.1.0 /24

Chain OUTPUT (policy ACCEPT 3 packets, 195 bytes)
pkts bytes target prot opt in out source destination

Chain VSERVER (2 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:3333 to:192.168.1.1:80
0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:4899 to:192.168.1.3:4899
0 0 DNAT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:4899 to:192.168.1.3:4899
0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpts:20:21 to:192.168.1.1:20
[admin@Asus_router root]$

Power
07-01-2009, 11:18
уже лучше! Вижу открытый порт....


А задачу-то оно выполняет? Просто адрес 192.168.33.240 как-то не тянет на внешний - как вы собираетесь этим пользоваться?

laz
07-01-2009, 11:20
А задачу-то оно выполняет? Просто адрес 192.168.33.240 как-то не тянет на внешний - как вы собираетесь этим пользоваться?

этот адрес получает через PPtp соединение роутер, а у профа я сквозняком имею свой белый 91.190.7Х.ХХ

theMIROn
07-01-2009, 12:12
Power спасибо, считал что и без указания протокола будет работать
laz
для проброса соединения на 62.141.52.195:4000 нужно извне соединяться с 192.168.33.240:443, а не 91.190.7Х.ХХ.
это реально?

Power
07-01-2009, 12:31
для проброса соединения на 62.141.52.195:4000 нужно извне соединяться с 192.168.33.240:443, а не 91.190.7Х.ХХ.

Я так понимаю, что у провайдера там NAT в режиме один-к-одному, т.е. 192.168.33.240 <-> 91.190.7Х.ХХ, так что соединяться надо с 91.190.7Х.ХХ, всё нормально.


---
Кстати, по идее, последнее правило


iptables -t nat -I POSTROUTING 1 -o $WAN_IFACE -d ${DIP} -j SNAT --to-source $WAN_IP

не нужно, роутер и без него разберётся.

laz
07-01-2009, 13:02
Power спасибо, считал что и без указания протокола будет работать
laz
для проброса соединения на 62.141.52.195:4000 нужно извне соединяться с 192.168.33.240:443, а не 91.190.7Х.ХХ.
это реально?

Вроде заработало!!! только нужно со скоростью разобраться, медленно ответы приходят... Как все заработает , отпишу!!! Спасибо!!!

2bars
07-01-2009, 13:34
Кстати, по идее, последнее правило


iptables -t nat -I POSTROUTING 1 -o $WAN_IFACE -d ${DIP} -j SNAT --to-source $WAN_IP

не нужно, роутер и без него разберётся.

как это не нужно... приходит пакет на маршрутизатор, он его посматрел и нечего не меняя отправил на другой порт на другой сервер... тот сервер смотрит пакет а в нем в заголовке айпи адрес того чувака, который отправил пакет на роутер... тот значит отправит ему ответ... и клиенский комп сойдет сума, т.к. ему приходит ответ, от того, у кого он не спрашивал, сомневаюсь чёт

Power
07-01-2009, 16:36
как это не нужно... приходит пакет на маршрутизатор, он его посматрел и нечего не меняя отправил на другой порт на другой сервер... тот сервер смотрит пакет а в нем в заголовке айпи адрес того чувака, который отправил пакет на роутер... тот значит отправит ему ответ... и клиенский комп сойдет сума, т.к. ему приходит ответ, от того, у кого он не спрашивал, сомневаюсь чёт

А если подумать? На роутере уже и так включён маскарадинг, под действие которого попадёт наш пакет, и адрес успешно поменяется на правильный


Chain POSTROUTING (policy ACCEPT 3 packets, 195 bytes)
pkts bytes target prot opt in out source destination
1 60 SNAT all -- * ppp0 0.0.0.0/0 62.141.52.19 5 to:192.168.33.240
9 432 MASQUERADE all -- * ppp0 !192.168.33.240 0.0.0.0/0
0 0 MASQUERADE all -- * vlan1 !172.31.48.241 0.0.0.0/0
0 0 MASQUERADE all -- * br0 192.168.1.0/24 192.168.1.0 /24

laz
08-01-2009, 20:58
Ребята, у меня в sysloge появилась сия хрень! может кто скажет, что это?

kernel: HTB init, kernel part version 3.16
Jan 1 03:00:24 kernel: HTB: quantum of class 10001 is big. Consider r2q change.
Jan 1 03:00:25 kernel: HTB: quantum of class 10014 is big. Consider r2q change.
Jan 1 03:00:25 kernel: HTB init, kernel part version 3.16
Jan 1 03:00:25 kernel: HTB: quantum of class 10001 is big. Consider r2q change.
Jan 1 03:00:25 kernel: HTB: quantum of class 10014 is big. Consider r2q change.