Linux下基于L2TP/IPSec + iptables + gost实现全局网络访问

1246 views
Skip to first unread message

Rain Zen

unread,
Jan 16, 2017, 5:23:49 AM1/16/17
to go-gost
之前写过一篇类似的文章,是利用PPTP + iptables + redsocks,但由于新版IOS上已经不支持PPTP了,所以这里面就换用IPSec来实现。
新版的gost也已经支持透明代理,redsocks也可以省去了,所以理论上这种方法要比之前的简单许多。

首先安装IPSec VPN服务,网上有人已经写了个自动化脚本,就不用我们费心再一步一步安装了:https://github.com/hwdsl2/setup-ipsec-vpn

再把透明代理跑起来:

gost -L redirect://:12345 -F http2://SERVER_IP:443?ping=30

若要避免DNS污染,可以再利用DNS转发:

gost -L udp://:1053/8.8.8.8:53?ttl=5 -L redirect://:12345 -F http2://SERVER_IP:443?ping=30

剩下的就是iptables了,修改/etc/iptables.rules文件,在nat中增加:

-A PREROUTING -i eth+ -p udp --dport 53 -j DNAT --to LOCAL_IP:1053
-A PREROUTING -p tcp -j REDSOCKS

-A OUTPUT -p tcp -j REDSOCKS
-A REDSOCKS -d 0.0.0.0/8 -j RETURN
-A REDSOCKS -d 10.0.0.0/8 -j RETURN
-A REDSOCKS -d 127.0.0.0/8 -j RETURN
-A REDSOCKS -d 169.254.0.0/16 -j RETURN
-A REDSOCKS -d 192.168.0.0/16 -j RETURN
-A REDSOCKS -d 224.0.0.0/4 -j RETURN
-A REDSOCKS -d 240.0.0.0/4 -j RETURN
-A REDSOCKS -d SERVER_IP -j RETURN
-A REDSOCKS -p tcp -j REDIRECT --to-ports 12345


上面看上去是不是还是挺麻烦的,其实还有一种更简单的办法,就是利用端口转发,将VPN直接映射到本地:

gost -L udp://:500/SERVER_IP:500 -L udp://:4500/SERVER_IP:4500 -L udp://:1701/SERVER_IP:1701 -F http2://SERVER_IP:443

这样本地就不用安装配置任何东西就可以作为VPN服务了。

wz

unread,
Jan 31, 2017, 7:54:13 AM1/31/17
to go-gost
winxp系统,VMware开ubuntu(桥接) 装pptp和gost 成功实现vpn仿真  桥接网卡分配的地址是192.168.36.79
./gost -L udp://:53/8.8.8.8:53 -L redirect://:12345 -F socks://@169.xx.xx.xx:443

单独使用dns解析,正常
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\wz>nslookup cn.ntdtv.com
*** Can't find server name for address 192.168.36.79: Non-existent domain
*** Default servers are not available
Server:  UnKnown
Address:  192.168.36.79

Non-authoritative answer:
Name:    www.ntdtv.com
Address:  130.211.15.150
Aliases:  cn.ntdtv.com


但是连上vpn后,dns解析结果发生一定的出错率(多数时正常)
C:\wz>nslookup cn.ntdtv.com
*** Can't find server name for address 192.168.36.79: Non-existent domain
Server:  google-public-dns-a.google.com
Address:  8.8.8.8

Non-authoritative answer:
Name:    cn.ntdtv.com
Address:  31.13.78.37
看这里,别名变成了正名,地址也解析错了,实际是Facebook的地址

wz

unread,
Feb 13, 2017, 2:19:26 AM2/13/17
to go-gost
在Linux系统上做dns转发./gost -L=udp://:53/8.8.8.8:53 -F=socks://168.0.0.10:443 &
由于socks受限流,改造了一下

./gost -L=tcp://:8443/168.0.0.10:443 -F=http+tls://168.0.0.24:8080 &
./gost -L=udp://:53/8.8.8.8:53 -F=socks://127.0.0.1:8443 &

进程跑起来却无法联通,我感觉理论上应该可行,在window系统试了一下,确实可行,但Linux系统不行,不知为何?

Smallville L

unread,
Nov 9, 2017, 10:47:59 PM11/9/17
to go-gost
gost -L udp://:500/SERVER_IP:500 -L udp://:4500/SERVER_IP:4500 -L udp://:1701/SERVER_IP:1701 -F http2://SERVER_IP:443
就一条命令这么简单?不过似乎没效果。另外IPSEC服务器端也没用到1701端口吧。

在 2017年1月16日星期一 UTC+8下午6:23:49,ginuerzh写道:

ginuerzh

unread,
Nov 9, 2017, 11:08:07 PM11/9/17
to go-gost
上面是针对2.3版本的,2.4中要用h2替换http2:

gost -L udp://:500/SERVER_IP:500 -L udp://:4500/SERVER_IP:4500 -L udp://:1701/SERVER_IP:1701 -F h2://SERVER_IP:443

服务端也要相应换成h2。

在 2017年11月10日星期五 UTC+8上午11:47:59,Smallville L写道:

Smallville L

unread,
Nov 10, 2017, 3:05:05 AM11/10/17
to go-gost
感激回复,你上面教程没有涉及服务器端的命令啊。还需要在服务器端运行什么命令?
ipsec vpn我安装的是strangswan,客户端用vpnc已经正常使用,想试试 gost

谢谢。

ginuerzh

unread,
Nov 10, 2017, 5:00:59 AM11/10/17
to go-gost
客户端的每一个-F参数都对应着一个服务端的代理服务,所以要跑一个http2的服务:

gost -L h2://:443

在 2017年11月10日星期五 UTC+8下午4:05:05,Smallville L写道:
Reply all
Reply to author
Forward
0 new messages