[教程] 在 Windows 上使用 tun2socks 进行全局代理

这是一篇在 Windows 上使用 tun2socks 进行全局 TCP/UDP 流量代理的教程,有别于一般仅使用 SOCKS5 代理浏览器请求的方式,这种全局代理不仅可以代理浏览器的请求,还可以代理其它所有应用程序的请求流量,比如代理游戏的流量,代理所有命令行工具的流量。

要使用 tun2socks,需要创建一个虚拟网卡,首先下载 Tap-windows 并安装:

下载地址:http://build.openvpn.net/downloads/releases/tap-windows-9.22.1-I602.exe

下载并保存

双击安装,一路下一步,确定之类的常规操作

这里点 Yes
这里就这样默认就行
这里点 Install
最后就安装完了

最后为了确认是否真的安装成功,可以打开网络设置查看一下,如果安装成功,应该像下图那样,多出来一个虚拟网卡,下面有显示 TAP-Windows Adapter V9 的字样:

虚拟网卡安装完了,下面就可以下载一个 tun2socks:

下载地址:https://github.com/eycorsican/go-tun2socks/releases/download/v1.11.2/tun2socks-windows-4.0-amd64.exe.zip

下载保存并解压,最后得到一个可执行文件

打开一个命令行, cd 到 tun2socks 程序所在的目录,然后执行下查看命令(-h)测试程序是否能够正常运行:

没问题的话就执行以下命令,正式运行 tun2socks:

tun2socks-windows-4.0-amd64.exe -tunAddr 10.0.0.2 -tunGw 10.0.0.1 -proxyType socks -proxyServer 192.168.101.1:1086 -dnsServer 8.8.8.8,8.8.4.4

上面命令表示 TUN 接口(虚拟网卡)的 IP 为 10.0.0.2,网关为 10.0.0.1,使用 socks5 代理协议,代理服务器地址是 192.168.101.1:1086,虚拟网卡的 DNS 服务器设为 8.8.8.8,8.8.4.4;其中 192.168.101.1:1086 是一个运行在我路由器上的 socks5 服务器,你需要换成自己的 socks5 服务器。

如果你用的是 shadowsocks 服务器,则可以把 proxyType 改为 shadowsocks,加上 proxyCipher 参数,加上 proxyPassword 参数,proxyServer 当然是填上你 shadowsocks 服务器的地址和端口:

tun2socks-windows-4.0-amd64.exe -tunAddr 10.0.0.2 -tunGw 10.0.0.1 -proxyType shadowsocks -proxyServer 192.168.101.1:1086 -dnsServer 8.8.8.8,8.8.4.4 -proxyCipher AES-256-CFB -proxyPassword 123456

使用 socks5 或者 shadosocks 服务器,服务器必须要支持 UDP。

甚至还可以使用 V2Ray 来作代理,假设你有以下 V2Ray 配置(对,只要一个 outbound):

{
"outbounds": [
{
"protocol": "vmess",
"settings": {
"vnext": [
{
"users": [
{
"id": "23b56f1f-a99f-423b-890b-4c7ceec545a0"
}
],
"address": "192.168.101.1",
"port": 1086
}
]
},
"streamSettings": {
"network": "tcp"
}
}
]
}

你可以这像运行命令:

tun2socks-windows-4.0-amd64.exe -tunAddr 10.0.0.2 -tunGw 10.0.0.1 -dnsServer 8.8.8.8,8.8.4.4 -proxyType v2ray -vconfig config.json

运行命令后,可以打开网络适配器设置,你应该可以看到之前新创建的虚拟网卡的红色叉已经没了,查看网卡的状态之类的,能够看到它的地址,网关,和 DNS 都变成我们所指定的了:

假如你发现它虚拟网卡的地址,网关,DNS 服务器等等不是我们所指定的,那你可以手动去设置它,具体方法很简单,就像平常设置静态 IP 一样,对着虚拟网卡的适配器点鼠标右键,点属性,双击 TCP/IPv4 那里,在弹出框里填上相关信息即可:

虚拟网卡设置好了,tun2socks 也运行起来了,就差改路由表,把我们的虚拟网卡设为默认出口网卡了。

改路由表需要管理员权限,所以在程序里面找到命令行程序,点鼠标右键,选择以管理员权限运行:

首先可以在新打开的命令行里运行一条命令查看下当前路由表的信息:

netstat -nr

接下来运行一条命令把原来的默认路由删除:

route delete 0.0.0.0 mask 0.0.0.0

再查看下路由表,可以发现原来列表中的第一条已经消失了:

然后加一条新路由把我们的虚拟网卡指定为默认的路由出口:

route add 0.0.0.0 mask 0.0.0.0 10.0.0.1 metric 6

这时再次 netstat -nr 可以看到新加的默认路由了:

加外还要加一条路由让去我们代理服务器的流量发到原来的网关(10.0.2.2):

route add 192.168.101.1 10.0.2.2 metric 5

这里 192.168.101.1 要替换成你代理服务器的地址,而原来网关的地址 10.0.2.2 在你系统上也可能不一样,你需要自己查看下,具体做法就是到网络适配器配置的页面,找到原来的网卡,双击打开状态,查看详细信息,里面的网关一项就是了:

这时候你可以 ping 一下你的代理服务器,必须是能够 ping 通的,如果 ping 不通,肯定是前面路由表配置错了:

这样就配置完成了。

这时如果你在命令行里输入,你应该能够得到返回结果:

nslookup www.google.com

并且 tun2socks 里也会有相应的日志输出:

你还可以打开浏览器尝试打开任何网页,这里就不截图了。

就这样,没其它了。

等等!!

因为刚才我们改了路由表,如果你现在把 tun2socks 给停掉(Ctrl + C)了,那你是不能够恢复上网的,因为现在没默认路由了!

为了能够在 tun2socks 停掉之后,原来的上网连接能够恢复正常,最简单的做法是直接重启电脑,没什么是一个重启解决不了的,有的话就再来个重启,但估计你不太愿意这么做,所以我们需要把原来的路由给加回去。

同样要以管理员权限来运行命令行,首先执行一条命令,把任何当前的默认路由给删除了:

route delete 0.0.0.0 mask 0.0.0.0

然后把原来的默认路由加回去:

route add 0.0.0.0 mask 0.0.0.0 10.0.2.2 metric 50

再次注意,这个 10.0.2.2 在你的系统上可能是不一样的,你得自己去查看。

这就 OK 了,网络完全恢复原样,本教程也就到此为止。