OpenVPN:MULTI:来自客户端的错误源地址,数据包丢失

我有一个VPS(Debian稳定)与一个networking接口和一个公共IP地址configuration。 我在那个VPS上安装了openvpn软件包,我想configuration一个VPN服务器。 我正在使用这个HOWTO 。

这里是configuration文件。

服务器:

 # egrep -v "^#|^;|^$" /etc/openvpn/server-vpn.conf local 151.80.57.162 port 11941 proto udp dev tun ca /etc/openvpn/certs/ca.crt cert /etc/openvpn/certs/server-vpn.crt key /etc/openvpn/certs/server-vpn.key dh /etc/openvpn/certs/dh4096.pem topology subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" keepalive 10 120 cipher AES-256-CBC auth SHA512 keysize 256 comp-lzo persist-key persist-tun status openvpn-status.log verb 4 

客户:

 # egrep -v "^#|^;|^$" /etc/openvpn/client-vpn.conf client dev tun proto udp remote 151.80.57.162 11941 resolv-retry infinite nobind persist-key persist-tun ca /etc/openvpn/certs/ca.crt cert /etc/openvpn/certs/client-vpn.crt key /etc/openvpn/certs/client-vpn.key remote-cert-tls server cipher AES-256-CBC auth SHA512 keysize 256 comp-lzo verb 4 auth-nocache script-security 2 up /etc/openvpn/update-resolv-conf.sh down /etc/openvpn/update-resolv-conf.sh 

我也启用了在服务器上转发并添加了NAT规则:

 # iptables -S FORWARD -P FORWARD DROP -A FORWARD -s 10.8.0.0/24 -i tun0 -o eth0 -j ACCEPT -A FORWARD -d 10.8.0.0/24 -i eth0 -o tun0 -j ACCEPT # iptables -S -t nat -P PREROUTING ACCEPT -P INPUT ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 151.80.57.162 # sysctl -a | grep -i net.ipv4.ip_forward net.ipv4.ip_forward = 1 

VPN端口也在INPUT链中打开。

我能够从客户端和客户端从服务器上ping服务器。 所以连接工作得很好。 以下是build立隧道后客户端的路由表:

 $ ip route show 0.0.0.0/1 via 10.8.0.1 dev tun0 default via 192.168.1.1 dev eth0 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.4 128.0.0.0/1 via 10.8.0.1 dev tun0 151.80.57.162 via 192.168.1.1 dev eth0 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.150 192.168.10.0/24 dev br-lxc proto kernel scope link src 192.168.10.100 

这里是客户端上的eth0和tun0接口:

 $ ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 3c:4a:92:00:4c:5b brd ff:ff:ff:ff:ff:ff inet 192.168.1.150/24 brd 192.168.1.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::3e4a:92ff:fe00:4c5b/64 scope link valid_lft forever preferred_lft forever $ ip addr show tun0 74: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100 link/none inet 10.8.0.4/24 brd 10.8.0.255 scope global tun0 valid_lft forever preferred_lft forever inet6 fe80::dc57:9092:9cc2:abcc/64 scope link flags 800 valid_lft forever preferred_lft forever 

这里还有服务器上的路由和接口:

 # ip route show default via 151.80.57.1 dev eth0 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1 151.80.57.1 dev eth0 scope link # ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether fa:16:3e:dd:db:03 brd ff:ff:ff:ff:ff:ff inet 151.80.57.162/32 brd 151.80.57.162 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::f816:3eff:fedd:db03/64 scope link valid_lft forever preferred_lft forever # ip addr show tun0 60: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100 link/none inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0 valid_lft forever preferred_lft forever 

因此,客户端和服务器之间的连接可以build立起来,而且看起来效果很好。 但是,当我想通过这个VPN服务器发送一些stream量时,它只能部分工作。 我的意思是一些客户端的stream量通过VPN成功路由,但其中一些没有,我不知道为什么。

Wireshark显示了这样的东西(客户端上的tun0接口): Wireshark的

而且我认为这就是为什么FF中的页面不能加载,但是我的jabber客户端运行良好,就像你在相同的图片上看到的那样。 DNS也起作用。 我可以ping通8.8.8.8并通过VPNparsing域名,但由于某些原因,WWW / MAILstream量(可能还有其他一些stream量)无法通过VPN服务器。

查看VPN服务器日志(动词4),我可以看到很多以下消息:

 Wed Nov 30 17:59:48 2016 us=146856 client-vpn/94.254.226.118:7669 MULTI: bad source address from client [192.168.1.150], packet dropped Wed Nov 30 17:59:48 2016 us=421203 client-vpn/94.254.226.118:7669 MULTI: bad source address from client [192.168.1.150], packet dropped Wed Nov 30 17:59:49 2016 us=10514 client-vpn/94.254.226.118:7669 MULTI: bad source address from client [192.168.1.150], packet dropped 

我有其他的VPN服务器,我连接到,但他们不是我的,连接工作没有问题,所以可能是我的VPN服务器有问题。 我只想连接到VPN,以便在浏览networking时更改我自己的IP地址。 所以问题是:如何使VPN工作?

我知道问题出在哪里。 我在80和443端口上设置了SYNproxy,所以te机制可以保护我的web服务器。 不幸的是我忘了在iptables的raw表中指定-i eth0 。 因此,通过VPN发送到端口的所有stream量都被简单地标记为INVALID,之后在filter表中的INPUT链中被丢弃,这可能是因为不同的MSS(需要1460)。

在这里您可以看到SYN数据包,并且它是在raw表中logging的端口:

 Dec 05 18:49:35 kernel: IN=tun0 OUT= MAC= SRC=10.8.0.10 DST=46.105.189.254 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=23425 DF PROTO=TCP SPT=61546 DPT=80 WINDOW=29200 RES=0x00 SYN URGP= 

而这个SYN被阻塞了,所以这就是为什么它没有得到SYN-ACK,这就是为什么我得到这个奇怪的半工作VPN。 现在一切正常。