Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

只有第一次连接成功了,后面都不行了 #11

Closed
hfcorriez opened this issue Oct 5, 2014 · 31 comments
Closed

只有第一次连接成功了,后面都不行了 #11

hfcorriez opened this issue Oct 5, 2014 · 31 comments

Comments

@hfcorriez
Copy link

服务器确认木有问题,但有奇怪的日志,客户端 start 的时候服务器没有日志

> netstat -nlptu | grep 1123
udp        0      0 0.0.0.0:1123            0.0.0.0:*                           -
> tail /var/log/shadowvpn.log
Sun Oct  5 16:24:49 2014 dropping invalid packet, maybe wrong password
Sun Oct  5 16:24:50 2014 dropping invalid packet, maybe wrong password
Sun Oct  5 16:25:42 2014 dropping invalid packet, maybe wrong password
/etc/shadowvpn/server_down.sh done
net.ipv4.ip_forward = 1
/etc/shadowvpn/server_up.sh done
Sun Oct  5 17:10:24 2014 dropping invalid packet, maybe wrong password
Sun Oct  5 17:10:25 2014 dropping invalid packet, maybe wrong password
Sun Oct  5 17:11:00 2014 dropping invalid packet, maybe wrong password
Sun Oct  5 17:11:02 2014 dropping invalid packet, maybe wrong password

客户端现在的路由:

> route
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.7.0.1        0.0.0.0         UG    0      0        0 tun0
10.7.0.0        *               255.255.255.0   U     0      0        0 tun0
180.157.232.1   *               255.255.255.255 UH    0      0        0 pppoe-wan
xxx.xxx.xxx.xxx  180.157.232.1   255.255.255.255 UGH   0      0        0 pppoe-wan
192.168.190.0   *               255.255.255.0   U     0      0        0 br-lan
@clowwindy
Copy link
Owner

应该是密码不一致。

@hfcorriez
Copy link
Author

image

真的是一样的。

@clowwindy
Copy link
Owner

在服务器上 tail -f shadowvpn.log,在客户端上 ping 10.7.0.1,看看是否会不断打出 dropping invalid packet, maybe wrong password

@hfcorriez
Copy link
Author

不会,ping 的通,网络依然无法访问

@clowwindy
Copy link
Owner

既然能 ping 通说明 VPN 本身没有问题,dropping invalid packet, maybe wrong password 应该是之前还没配好时的 log

那在本地 traceroute 8.8.8.8 看看呢?

@hfcorriez
Copy link
Author

走一段即挂,现在客户端在 openwrt 上,ar71,还可能是什么问题?
密码之前设置好就没改过,偶尔还是会有密码错误的信息,偶然性。

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 38 byte packets
 1  10.7.0.1 (10.7.0.1)  176.229 ms  175.347 ms  177.588 ms
 2  *  *  *
 3  *  *  *
 4  *  *  *

@clowwindy
Copy link
Owner

看上去到了服务器,但是出不去

依次执行这三条命令看看输出:

sysctl net.ipv4.ip_forward
iptables -S
iptables -t nat -S

@hfcorriez
Copy link
Author

服务端:

hfcorriez@sf1:~$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
hfcorriez@sf1:~$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -p udp -m udp --dport 68 -j ACCEPT
-A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i tun0 -o eth0 -j ACCEPT
hfcorriez@sf1:~$ sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE

客户端:

root@GW:/etc/shadowvpn# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
root@GW:/etc/shadowvpn# iptables -S
-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N forward
-N forwarding_lan
-N forwarding_rule
-N forwarding_wan
-N input
-N input_lan
-N input_rule
-N input_wan
-N nat_reflection_fwd
-N output
-N output_rule
-N reject
-N syn_flood
-N zone_lan
-N zone_lan_ACCEPT
-N zone_lan_DROP
-N zone_lan_REJECT
-N zone_lan_forward
-N zone_wan
-N zone_wan_ACCEPT
-N zone_wan_DROP
-N zone_wan_REJECT
-N zone_wan_forward
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn_flood
-A INPUT -j input_rule
-A INPUT -j input
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -j forwarding_rule
-A FORWARD -j forward
-A FORWARD -j reject
-A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o tun0 -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m conntrack --ctstate INVALID -j DROP
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -j output_rule
-A OUTPUT -j output
-A forward -i br-lan -j zone_lan_forward
-A forward -i pppoe-wan -j zone_wan_forward
-A forwarding_rule -j nat_reflection_fwd
-A input -i br-lan -j zone_lan
-A input -i pppoe-wan -j zone_wan
-A nat_reflection_fwd -s 192.168.190.0/24 -d 192.168.190.1/32 -p tcp -m tcp --dport 80 -m comment --comment "wan" -j ACCEPT
-A nat_reflection_fwd -s 192.168.190.0/24 -d 192.168.190.131/32 -p tcp -m tcp --dport 25 -m comment --comment "wan" -j ACCEPT
-A nat_reflection_fwd -s 192.168.190.0/24 -d 192.168.190.131/32 -p udp -m udp --dport 25 -m comment --comment "wan" -j ACCEPT
-A nat_reflection_fwd -s 192.168.190.0/24 -d 192.168.190.222/32 -p tcp -m tcp --dport 8080 -m comment --comment "wan" -j ACCEPT
-A nat_reflection_fwd -s 192.168.190.0/24 -d 192.168.190.222/32 -p udp -m udp --dport 8080 -m comment --comment "wan" -j ACCEPT
-A output -j zone_lan_ACCEPT
-A output -j zone_wan_ACCEPT
-A reject -p tcp -j REJECT --reject-with tcp-reset
-A reject -j REJECT --reject-with icmp-port-unreachable
-A syn_flood -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 25/sec --limit-burst 50 -j RETURN
-A syn_flood -j DROP
-A zone_lan -j input_lan
-A zone_lan -j zone_lan_ACCEPT
-A zone_lan_ACCEPT -o br-lan -j ACCEPT
-A zone_lan_ACCEPT -i br-lan -j ACCEPT
-A zone_lan_DROP -o br-lan -j DROP
-A zone_lan_DROP -i br-lan -j DROP
-A zone_lan_REJECT -o br-lan -j reject
-A zone_lan_REJECT -i br-lan -j reject
-A zone_lan_forward -j zone_wan_ACCEPT
-A zone_lan_forward -j forwarding_lan
-A zone_lan_forward -j zone_lan_REJECT
-A zone_wan -p udp -m udp --dport 68 -j ACCEPT
-A zone_wan -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A zone_wan -d 192.168.190.1/32 -p tcp -m tcp --dport 80 -m conntrack --ctstate DNAT -j ACCEPT
-A zone_wan -j input_wan
-A zone_wan -j zone_wan_REJECT
-A zone_wan_ACCEPT -o pppoe-wan -j ACCEPT
-A zone_wan_ACCEPT -i pppoe-wan -j ACCEPT
-A zone_wan_DROP -o pppoe-wan -j DROP
-A zone_wan_DROP -i pppoe-wan -j DROP
-A zone_wan_REJECT -o pppoe-wan -j reject
-A zone_wan_REJECT -i pppoe-wan -j reject
-A zone_wan_forward -d 192.168.190.131/32 -p tcp -m tcp --dport 25 -j ACCEPT
-A zone_wan_forward -d 192.168.190.131/32 -p udp -m udp --dport 25 -j ACCEPT
-A zone_wan_forward -d 192.168.190.222/32 -p tcp -m tcp --dport 8080 -j ACCEPT
-A zone_wan_forward -d 192.168.190.222/32 -p udp -m udp --dport 8080 -j ACCEPT
-A zone_wan_forward -j forwarding_wan
-A zone_wan_forward -j zone_wan_REJECT
root@GW:/etc/shadowvpn# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N nat_reflection_in
-N nat_reflection_out
-N postrouting_rule
-N prerouting_lan
-N prerouting_rule
-N prerouting_wan
-N zone_lan_nat
-N zone_lan_prerouting
-N zone_wan_nat
-N zone_wan_prerouting
-A PREROUTING -j prerouting_rule
-A PREROUTING -i br-lan -j zone_lan_prerouting
-A PREROUTING -i pppoe-wan -j zone_wan_prerouting
-A POSTROUTING -j postrouting_rule
-A POSTROUTING -o br-lan -j zone_lan_nat
-A POSTROUTING -o pppoe-wan -j zone_wan_nat
-A POSTROUTING -o tun0 -j MASQUERADE
-A nat_reflection_in -s 192.168.190.0/24 -d 180.157.235.55/32 -p tcp -m tcp --dport 88 -m comment --comment "wan" -j DNAT --to-destination 192.168.190.1:80
-A nat_reflection_in -s 192.168.190.0/24 -d 180.157.235.55/32 -p tcp -m tcp --dport 25 -m comment --comment "wan" -j DNAT --to-destination 192.168.190.131:25
-A nat_reflection_in -s 192.168.190.0/24 -d 180.157.235.55/32 -p udp -m udp --dport 25 -m comment --comment "wan" -j DNAT --to-destination 192.168.190.131:25
-A nat_reflection_in -s 192.168.190.0/24 -d 180.157.235.55/32 -p tcp -m tcp --dport 8080 -m comment --comment "wan" -j DNAT --to-destination 192.168.190.222:8080
-A nat_reflection_in -s 192.168.190.0/24 -d 180.157.235.55/32 -p udp -m udp --dport 8080 -m comment --comment "wan" -j DNAT --to-destination 192.168.190.222:8080
-A nat_reflection_out -s 192.168.190.0/24 -d 192.168.190.1/32 -p tcp -m tcp --dport 80 -m comment --comment "wan" -j SNAT --to-source 192.168.190.1
-A nat_reflection_out -s 192.168.190.0/24 -d 192.168.190.131/32 -p tcp -m tcp --dport 25 -m comment --comment "wan" -j SNAT --to-source 192.168.190.1
-A nat_reflection_out -s 192.168.190.0/24 -d 192.168.190.131/32 -p udp -m udp --dport 25 -m comment --comment "wan" -j SNAT --to-source 192.168.190.1
-A nat_reflection_out -s 192.168.190.0/24 -d 192.168.190.222/32 -p tcp -m tcp --dport 8080 -m comment --comment "wan" -j SNAT --to-source 192.168.190.1
-A nat_reflection_out -s 192.168.190.0/24 -d 192.168.190.222/32 -p udp -m udp --dport 8080 -m comment --comment "wan" -j SNAT --to-source 192.168.190.1
-A postrouting_rule -j nat_reflection_out
-A prerouting_rule -j nat_reflection_in
-A zone_lan_prerouting -j prerouting_lan
-A zone_wan_nat -j MASQUERADE
-A zone_wan_prerouting -p tcp -m tcp --dport 88 -j DNAT --to-destination 192.168.190.1:80
-A zone_wan_prerouting -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.190.131:25
-A zone_wan_prerouting -p udp -m udp --dport 25 -j DNAT --to-destination 192.168.190.131:25
-A zone_wan_prerouting -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.190.222:8080
-A zone_wan_prerouting -p udp -m udp --dport 8080 -j DNAT --to-destination 192.168.190.222:8080
-A zone_wan_prerouting -j prerouting_wan

@clowwindy
Copy link
Owner

看上去好像没有明显的问题,不知道为什么服务器端上 tun0 没有被 NAT 到 eth0,有可能是公网 IP 用的是 eth1?

也可以在服务器上用 tcpdump host 8.8.8.8 看一看。如果还是找不到原因,能否让我登上去看看?

@hfcorriez
Copy link
Author

看了不是 eth1,执行 tcpdump host 8.8.8.8 提示,帐号发你邮箱吧。

tcpdump host 8.8.8.8
tcpdump: no suitable device found

@clowwindy
Copy link
Owner

我邮箱 clowwindy42 gmail

@clowwindy
Copy link
Owner

我测试了一下正常工作,ping 不通外网可能是服务器防火墙禁止了 ping。问题应该在客户端上。
既然不能用 ping,只能试试这样测试了:

dig @8.8.8.8 twitter.com
curl -L twitter.com

同时在服务器上 sudo tcpdump -i tun0

@clowwindy
Copy link
Owner

另外发现你的 VPS 网卡的 IP 和外网 IP 不一致,可能外面有个 NAT 防火墙,不知道上面有没有做一些超时限制之类的策略。

@hfcorriez
Copy link
Author

发现一些现象,路由器上执行 curl -L twitter.com 都是正常的。
但是在连到路由器的电脑上执行都不行

> dig @8.8.8.8 twitter.com

; <<>> DiG 9.8.3-P1 <<>> @8.8.8.8 twitter.com
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

curl -L twitter.com
curl: (7) Failed to connect to twitter.com port 80: Connection refused

tcpdump 没发现什么可用信息,电脑上 curl 的时候貌似没有包过来,异常只有一些

18:59:43.836978 IP 180.157.235.55 > 14.223.13.255: ICMP 180.157.235.55 udp port 1025 unreachable, length 36

@hfcorriez
Copy link
Author

外面有个防火墙,超时限制理论没有,微软 azure 默认的配置,只是开放了1123端口。

@hfcorriez
Copy link
Author

这个路由正常么?

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.7.0.1        0.0.0.0         UG    0      0        0 tun0
10.7.0.0        *               255.255.255.0   U     0      0        0 tun0
180.157.232.1   *               255.255.255.255 UH    0      0        0 pppoe-wan
xxx.xxx.xxx.xxx  180.157.232.1   255.255.255.255 UGH   0      0        0 pppoe-wan
192.168.190.0   *               255.255.255.0   U     0      0        0 br-lan

@clowwindy
Copy link
Owner

也许把本地端脚本里的 eth0 都改为 br-lan 会好?

@hfcorriez
Copy link
Author

改了 br-lan 不行,之前觉得可能配置该挂了,也全恢复成默认的了,重新写也不成。
第一次不知道怎么能用的。。。好奇怪。。。

@clowwindy
Copy link
Owner

在电脑上 ping 10.7.0.1 能不能 ping 通呢?

@hfcorriez
Copy link
Author

也试了其他的设备,访问不能。电脑上 ping 如下

Request timeout for icmp_seq 6
92 bytes from gw.lan (192.168.190.1): Destination Port Unreachable
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 5400 cb5f   0 0000  3f  01 26bb 192.168.190.222  10.7.0.1

@clowwindy
Copy link
Owner

我用的是 Barrier Breaker 14.07-rc1,路由规则和你的不太一样。可能你需要把这两条也应用到 tun0 上。

-A PREROUTING -i pppoe-wan -j zone_wan_prerouting
-A POSTROUTING -o pppoe-wan -j zone_wan_nat

不过既然你一开始可以用,也许最简单的方法是把设置改回去,重启一下路由器?

如果还是不行,我觉得最好的方法是用 OpenWRT 自带的 Web 界面配置来配置,即把 client.sh 里配置 ip 和路由等的内容都删掉,然后在 web 界面里自己添加 interface,配置几条路由……我本来打算研究一下看看要不要默认推荐这样做,再写个教程,无奈有人已经把项目发到 V2EX 上了,然后就来了一大波用户 =。=

@hfcorriez
Copy link
Author

我是看到你 star 了自己的项目才发现 而且路由器的方案一直不好用 就冲着 shadowsocks 也要用下 好东西

我明天试试 太晚了 早睡 今天麻烦了😊

发自我的 iPhone

在 2014年10月6日,03:35,clowwindy notifications@github.com 写道:

我用的是 Barrier Breaker 14.07-rc1,路由规则和你的不太一样。可能你需要把这两条也应用到 tun0 上。

-A PREROUTING -i pppoe-wan -j zone_wan_prerouting
-A POSTROUTING -o pppoe-wan -j zone_wan_nat

不过既然你一开始可以用,也许最简单的方法是把设置改回去,重启一下路由器?

如果还是不行,我觉得最好的方法是用 OpenWRT 自带的 Web 界面配置来配置,即把 client.sh 里配置 ip 和路由等的内容都删掉,然后在 web 界面里自己添加 interface,配置几条路由……我本来打算研究一下看看要不要默认推荐这样做,再写个教程,无奈有人已经把项目发到 V2EX 上了,然后就来了一大波用户 =。=


Reply to this email directly or view it on GitHub.

@clowwindy
Copy link
Owner

把 client_up.sh 和 client_down.sh 内容清空,然后配置 OpenWRT 可行。

配置之后效果是这样的:

https://github.com/clowwindy/ShadowVPN/wiki/Configure-Via-LuCI-on-OpenWRT

@hfcorriez
Copy link
Author

赞,晚上试试

@hfcorriez
Copy link
Author

搞定,就是有点慢。。。比 shadowsocks 来说慢了不少,youtube 自动识别画质甚至低到 144p

@clowwindy
Copy link
Owner

可以用文件下载测试一下 https://www.linode.com/speedtest
也可以检查一下 DNS 和 MTU 有没有问题。
如果 CPU 不是瓶颈,在一些网络条件下 vpn 会快一些,在另一些网络条件下 ss 快一些,看具体 VPS 和访问的网站的情况,比如我这边访问 YouTube 和 Twitter vpn 快一些,一些其它的美国网站 ss 快一些,可以根据自己常访问网站的速度选择方案。

@hfcorriez
Copy link
Author

MTU 配置和你一样,DNS 用了 ChinaDNS 方案,配置后可以 youtube 等访问正常,理论没问题。我在同一个服务器上有 shadowsocks,用后者访问明显比 shadowvpn 要快一些。

测试下来只有几十 K 的速度,我是日本的服务器,和美国下载速度差不多。

@clowwindy
Copy link
Owner

也有可能是 UDP 被 ISP QoS 了,不过调试起来就比较复杂了。
后面会有个 NB 的方案解决这个问题顺便增加 GFW 的成本,暂时先不公布细节了。

@hfcorriez
Copy link
Author

ISP 真恶心!顺便解决 GFW 大好。。。
赞!现在先用着,等你更牛逼的方案。

@clowwindy
Copy link
Owner

另外据说端口换 QQ 的 4000 有时有奇效。

@hfcorriez
Copy link
Author

哈哈,还有这个情况。。。
对了,虽然同个服务器有点差距,但我的日本服务器确实有点问题,现在换到美国速度嗖嗖的。。。1080 P 虽然没有秒开也差不多。。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants