Настраиваю вынос в открытый интернет веб-морды хоста
SERVICE HOST (192.168.1.108) см. схему.
Вроде заработало (см. ниже), однако есть неожиданная проблема:
ПРОБЛЕМА: -
Remote client, подключенный через прокси или через лабораторный прокси на SQUID не может загрузить страницу в любом браузере с симптомом «
Web Site found. Waiting for reply.. или Waiting for http://x.x.x.x …».
При этом ошибка не выдается, бесконечно висит крутящийся кружок. Адрес
x.x.x.x – белый, не блокируется web sence и пр.
Если же
remote client, подключен к интернету «на прямую», напр. при помощи GPRS модема, прямого кабеля от провайдера и пр., то ВСЕ РАБОТАЕТ: страница
http://x.x.x.x загружается нормально в любом браузере.
Уважаемые Заслуженные Герои! Помогите пожалуйста разобраться с iptables, port forwarding, NAT и продиагностировать мою проблему!!! Я новичок в Ubuntu в частности и в администрировании в целом, это мой первый пост, просьба не пинать.
По способу реализации: ТС знает про DynDNS.
Описание схемы и диагностика:1. Для исключения последующих ошибок,
Local client (см. схему) в сети
192.168.1.0/24 может подключиться без проблем к ресурсам:
ping 192.168.1.108 -> ping проходит
ping google.com -> ping проходит
http://192.168.1.108:80 -> страница загружается
http://www.google.com -> internet работает
2. Имеется сервер VDS [
fb10, IP: x.x.x.x] :
root@fb10:~# cat /proc/version
Linux version 3.11.0-12-generic (buildd@komainu) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu7) ) #19-Ubuntu SMP Wed Oct 9 16:12:00 UTC 2013
root@fb10:~# cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=13.10
DISTRIB_CODENAME=saucy
DISTRIB_DESCRIPTION="Ubuntu 13.10"
NAME="Ubuntu"
VERSION="13.10, Saucy Salamander"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 13.10"
VERSION_ID="13.10"
3. На этом сервере настроен и работает l2tp VPN server (настройки тривиальные).
4. На роутере ROUTER (см. схему) настроен и работает l2tp VPN client, автоматом подключающийся к l2tp VPN server.
Настройки подключения:
Server address: x.x.x.x
Login name: fb10usr2
Password: *********
Authentication algorithm: auto
Enable encryption: NO
Enable CCP (PPP Compression Control): NO
Configure IP: Auto
DNS 1: 8.8.8.8
Adjust TCP-MSS automatically: Yes
fb100 L2TP0
Status: Standing by
IP address: 10.152.2.2
IP subnet Mask: 255.255.255.255
Server address: 10.152.2.1
5. На роутере
ROUTER я могу пинговать сервер:
Ping host: 10.152.2.1
Ping host: 10.152.2.1 count: size:
Sending ICMP ECHO request to 10.152.2.1
PING 10.152.2.1 (10.152.2.1) 100 (128) bytes of data.
128 bytes from 10.152.2.1: icmp_req=1, ttl=64, time=100.47 ms.
. . . . .
128 bytes from 10.152.2.1: icmp_req=5, ttl=64, time=59.70 ms.
--- 10.152.2.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss,
. . .
6. Конфигурация сетевых интерфейсов на
VDS:
~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3c:df:e6:af
inet addr:x.x.x.x Bcast:x.x.x.x Mask:255.255.255.224
inet6 addr: fe80::216:3cff:fedf:e6af/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11085 errors:0 dropped:0 overruns:0 frame:0
TX packets:2258 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:964511 (964.5 KB) TX bytes:245538 (245.5 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.152.2.1 P-t-P:10.152.2.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:32 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:3178 (3.1 KB) TX bytes:417 (417.0 B)
7. При подъёме
ppp0 срабатывает скрипт, расположенный тут:
/etc/ppp/ip-up.d/startvpnroute Скрипт сделан на основе того, что найдено на просторах Googl-a где решали аналогичную проблему.
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
echo "Flushing ip tables.."
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -X -t nat
iptables -X -t mangle
#################################################################
# reset the default policies in the filter table. #
#################################################################
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
#################################################################
# reset the default policies in the nat table. #
#################################################################
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#################################################################
# reset the default policies in the mangle table. #
#################################################################
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
#################################################################
# flush all the rules in the filter and nat tables. #
#################################################################
iptables -F
iptables -t nat -F
iptables -t mangle -F
#################################################################
# erase all chains that's not default in filter and nat table. #
#################################################################
iptables -X
iptables -t nat -X
iptables -t mangle -X
echo "Listing ip tables:"
iptables -L -n -v -t nat
echo "repairing route table .."
# Delete auto created route for VPN with def gw:
route del -host 10.152.2.2 gw 0.0.0.0 dev ppp0
# Add the route w\ correct gw
route add -net 192.168.1.0/24 gw 10.152.2.1
# setting may drop after reboot
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -p /etc/sysctl.conf
echo "Finally, LISTING route table:"
route
############
# Port http :::
EXT_IP="x.x.x.x"
INT_IP="10.152.2.1"
EXT_IF=eth0
INT_IF=ppp0
LAN_IP="192.168.1.108"
SRV_PORT=80
iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $SRV_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT
# Router’ admin page :::
iptables -t nat -I PREROUTING -p tcp --dport 8085 -j DNAT --to-destination 192.168.1.1:80
# Masquarading
iptables -t nat -I POSTROUTING -j MASQUERADE
############
# PORT 8000 - TCP
EXT_IP="x.x.x.x"
INT_IP="10.152.2.1"
EXT_IF=eth0
INT_IF=ppp0
LAN_IP="192.168.1.108"
SRV_PORT=8000
iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $SRV_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT
echo "FINALLY, LISTING ip tables:"
iptables -L -n -v -t nat
exit 0
8. Выхлоп скрипта при ручном запуске в консоли /
etc/ppp/ip-up.d/startvpnroute :
~# ./startvpnroute
Flushing ip tables..
Listing ip tables:
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
repairing route table ..
Finally, LISTING route table:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default vds24.net 0.0.0.0 UG 0 0 0 eth0
x.x.x.x * 255.255.255.224 U 0 0 0 eth0
192.168.1.0 10.152.2.1 255.255.255.0 UG 0 0 0 ppp0
FINALLY, LISTING ip tables:
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
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:8085 to:192.168.1.1:80
0 0 DNAT tcp -- * * 0.0.0.0/0 x.x.x.x tcp dpt:80 to:192.168.1.108
0 0 DNAT tcp -- * * 0.0.0.0/0 x.x.x.x tcp dpt:8000 to:192.168.1.108
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- * * 0.0.0.0/0 x.x.x.x tcp dpt:80 to:192.168.1.108
0 0 DNAT tcp -- * * 0.0.0.0/0 x.x.x.x tcp dpt:8000 to:192.168.1.108
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 SNAT tcp -- * * 0.0.0.0/0 192.168.1.108 tcp dpt:80 to:10.152.2.1
0 0 SNAT tcp -- * * 0.0.0.0/0 192.168.1.108 tcp dpt:8000 to:10.152.2.1
9. Выхлоп
iptables-save:
# iptables-save
# Generated by iptables-save v1.4.18 on Thu Mar 20 16:26:48 2014
*mangle
:PREROUTING ACCEPT [578:276180]
:INPUT ACCEPT [221:127889]
:FORWARD ACCEPT [357:148291]
:OUTPUT ACCEPT [213:45489]
:POSTROUTING ACCEPT [570:193780]
COMMIT
# Completed on Thu Mar 20 16:26:48 2014
# Generated by iptables-save v1.4.18 on Thu Mar 20 16:26:48 2014
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -m tcp --dport 8085 -j DNAT --to-destination 192.168.1.1:80
-A PREROUTING -d x.x.x.x/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.108
-A PREROUTING -d x.x.x.x/32 -p tcp -m tcp --dport 8000 -j DNAT --to-destination 192.168.1.108
-A OUTPUT -d x.x.x.x/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.108
-A OUTPUT -d x.x.x.x/32 -p tcp -m tcp --dport 8000 -j DNAT --to-destination 192.168.1.108
-A POSTROUTING -j MASQUERADE
-A POSTROUTING -d 192.168.1.108/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 10.152.2.1
-A POSTROUTING -d 192.168.1.108/32 -p tcp -m tcp --dport 8000 -j SNAT --to-source 10.152.2.1
COMMIT
# Completed on Thu Mar 20 16:26:48 2014
# Generated by iptables-save v1.4.18 on Thu Mar 20 16:26:48 2014
*filter
:INPUT ACCEPT [219:127725]
:FORWARD ACCEPT [307:142525]
:OUTPUT ACCEPT [214:45608]
-A FORWARD -d 192.168.1.108/32 -i eth0 -o ppp0 -p tcp -m tcp --dport 8000 -j ACCEPT
-A FORWARD -d 192.168.1.108/32 -i eth0 -o ppp0 -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
# Completed on Thu Mar 20 16:26:48 2014
10. С сервера
VDS при поднятом VPN – подключении я могу пинговать
SERVICE HOST и
ROUTER:
~# ping 192.168.1.108
PING 192.168.1.108 (192.168.1.108) 56(84) bytes of data.
64 bytes from 192.168.1.108: icmp_seq=1 ttl=63 time=114 ms
64 bytes from 192.168.1.108: icmp_seq=2 ttl=63 time=175 ms
. . . .
~# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=63 time=214 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=63 time=135 ms
. . . .
^C
А теперь внимание!
11. Находясь на сервере
VDS при поднятом VPN я могу выполнить wget к веб-интерфейсу
SERVICE HOST, и вот что происходит:
~# wget http://192.168.1.108:80
--2014-03-13 16:29:10-- http://192.168.1.108/
Connecting to 192.168.1.108:80... connected.
HTTP request sent, awaiting response... 302 Redirect
Location: http://192.168.1.108/index.asp [following]
--2014-03-13 16:29:10-- http://192.168.1.108/index.asp
Connecting to 192.168.1.108:80... connected.
HTTP request sent, awaiting response...
^C
Команда wget подвисает, и не загружает страницу. Хотя, это страница с логином, но это не запрос авторизации через http-headers, или как оно точно называется, а именно – обычная страница, с формой, которую можно сохранить из браузера на локальный диск. Может ли данный момент быть причиной проблемы, описанной в п.
ПРОБЛЕМА?
Или, это не имеет отношения к основной причине? Ведь при «прямом» подключении
Remote Client – все работает.
12. Также проброшена страница админки роутера
ROUTER, при попытке загрузить, получаем адекватный выхлоп:
~# wget http://192.168.1.1:80
--2014-03-13 16:29:26-- http://192.168.1.1/
Connecting to 192.168.1.1:80... connected.
HTTP request sent, awaiting response... 401 Unauthorized
Authorization failed.
При этом,
Remote Client за фаерволом также не может открыть и
http://x.x.x.x:8085.
Фактически, трафик идет через 3 роутера:
ROUTER,
MODEM(кот. фактически тоже роутер) и
VDS. В чем может быть проблема? MTU, TTL?
С надеждой на конструктивную помощь,
Dmitry-75