Bekijk de volledige versie : Помогите решить проблему портмаппинга!
Уважаемые Гуру!
Я в Линухе ламер и прошу вашей помощи...
Суть такая: Мне нужно реализовать на роутере 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
если ничего не напутал, то должно сработать
#!/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
Писать в /usr/local/sbin/post-firewall
Если этот файл уже существует - дописать в него все, кроме первой строки #!/bin/sh
Если файла не было - сделать его исполнимым
chmod a+x /usr/local/sbin/post-firewall
Сохранить изменения
flashfs save && flashfs commit && flashfs enable
Перезагрузить роутер
reboot
Ну ведь специально перед тем, как отвечать, проверил, что никто не опередил :) Ну и ладно, зато у меня правильнее - /usr/local/post-firewall автоматом не запустится, надо /usr/local/sbin/post-firewall
Ну ведь специально перед тем, как отвечать, проверил, что никто не опередил :)
Спасибо всем Гуру!!!
попробую, может прокатит...:)
Спасибо всем Гуру!!!
попробую, может прокатит...:)
Не получается!!! Гуру расшифруйте пожалуйста 2 последние строки с iptable. Может сам докумекаю что к чему...:confused:
ИМХО SNAT легче Макскарада
Я не гуру, но колеса попинать могу :)
Вместо
DIP=xxx.xxx.xxx.xxx
надо подставить внешний ip адрес роутера. Сделано?
ИМХО SNAT легче Макскарада
Уф! Ребята попытаюсь объяснить суть... Может меня не правильно поняли?
Из корпоративной сети я могу работать только по двум портам 80 и 443!
Я хочу по этой сетке получать шару+++. Обычно она раздается по 4000 порту. Так вот, что я думаю. У меня белый ip дома и стот ройтер wl500gp. Хочу из корпоративной сети обращаться к роутеру по одному из выше указанных портов и чтобы роутер перенаправлял запросы на сервер шары с портом 4000.
Я не гуру, но колеса попинать могу :)
Вместо
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
Да, с DIP я наврал :( Конечно, это адрес шары, а не роутера.
А с какого адреса ты пытаешься проверять? Насколько я понимаю, надо не из локалки, а снаружи.
и правилно делал.
замени во второй строчке "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]$
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
Да, с DIP я наврал :( Конечно, это адрес шары, а не роутера.
А с какого адреса ты пытаешься проверять? Насколько я понимаю, надо не из локалки, а снаружи.
Для начала я проверяю наличие открытого порта через сервер http://www.canyouseeme.org/ Если там я не вижу его доступным, то далее нет смысла ковырять...
Все сделал как писали и вот что получил
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]$
Протокол! Протокол кто указывать будет?
#!/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 запускаете ручками, передайте ему аргументы: первый - имя внешнего интерфейса, второй - внешний айпи.
Протокол! Протокол кто указывать будет?
#!/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]$
уже лучше! Вижу открытый порт....
А задачу-то оно выполняет? Просто адрес 192.168.33.240 как-то не тянет на внешний - как вы собираетесь этим пользоваться?
А задачу-то оно выполняет? Просто адрес 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Х.ХХ.
это реально?
для проброса соединения на 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
не нужно, роутер и без него разберётся.
Power спасибо, считал что и без указания протокола будет работать
laz
для проброса соединения на 62.141.52.195:4000 нужно извне соединяться с 192.168.33.240:443, а не 91.190.7Х.ХХ.
это реально?
Вроде заработало!!! только нужно со скоростью разобраться, медленно ответы приходят... Как все заработает , отпишу!!! Спасибо!!!
Кстати, по идее, последнее правило
iptables -t nat -I POSTROUTING 1 -o $WAN_IFACE -d ${DIP} -j SNAT --to-source $WAN_IP
не нужно, роутер и без него разберётся.
как это не нужно... приходит пакет на маршрутизатор, он его посматрел и нечего не меняя отправил на другой порт на другой сервер... тот сервер смотрит пакет а в нем в заголовке айпи адрес того чувака, который отправил пакет на роутер... тот значит отправит ему ответ... и клиенский комп сойдет сума, т.к. ему приходит ответ, от того, у кого он не спрашивал, сомневаюсь чёт
как это не нужно... приходит пакет на маршрутизатор, он его посматрел и нечего не меняя отправил на другой порт на другой сервер... тот сервер смотрит пакет а в нем в заголовке айпи адрес того чувака, который отправил пакет на роутер... тот значит отправит ему ответ... и клиенский комп сойдет сума, т.к. ему приходит ответ, от того, у кого он не спрашивал, сомневаюсь чёт
А если подумать? На роутере уже и так включён маскарадинг, под действие которого попадёт наш пакет, и адрес успешно поменяется на правильный
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
Ребята, у меня в 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.