今天一晚上尝试了一下给宿舍的wifi做了透明代理。历经千辛万苦终于成功了,因此我决定将这个经历分享出来,说不定能帮到一些人。
准备
我这里使用的是二手的LinkSys的WRT1200AC路由器,刷入了目前最新的18.06.1版本的OpenWRT固件。这里推荐使用WRT系列的高性能路由器,像是TPLink或其他性能较弱的机型,可能无法流畅运行V2Ray。
另外你还需要一个对应版本的V2Ray预编译。我这款路由器的SoC是ARMv7的,因此下载ARM版本的,使用其中ARMv7的编译版本,可能性能会有一些优化的吧。
另外的另外,也是重中之重,你需要有一个可用的V2Ray服务器。
客户端配置
Screen
首先安装Screen
,它能够让V2Ray在后台运行。安装命令如下:
opkg update && opkg install screen
V2Ray配置
这是我使用的配置文件。其中只有任意门的入站
和路由
部分的设置比较重要。任意门入站是必须的,它接收iptables转发来的流量,而路由部分则决定这些流量该走哪里。
{
"log": {
"loglevel": "warning"
},
"inbounds": [{
"port": 1080,
"listen": "0.0.0.0",
"tag": "socks-inbound",
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false,
"ip": "127.0.0.1"
}
},{
"domainOverride": ["tls","http"],
"port": 10086,
"protocol": "dokodemo-door",
"settings": {
"network": "tcp",
"followRedirect": true
},
"tag":"door"
}],
"outbounds": [{
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "【服务器地址】",
"port": 【服务器端口】,
"users": [
{
"id": "【UUID】",
"alterId": 【alterId】,
"security": "auto",
"level": 0
}
]
}
]
},
"tag": "server"
},
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}],
"routing": {
"domainStrategy": "IPOnDemand",
"rules": [
{
"type": "field",
"outboundTag": "direct",
"domain": ["geosite:cn"]
},
{
"type": "chinaip",
"outboundTag": "direct",
"ip": [
"geoip:cn",
"geoip:private"
]
}
]
},
"dns": {
"hosts": {},
"servers": [
"8.8.8.8",
"1.1.1.1",
"9.9.9.9",
"localhost"
]
}
}
需要注意的是出站设置中的第一个元素是主出站设置,即路由规则之外的流量自动走server这个出站,即走代理。只有当匹配到是国内的网站或服务器时才直连。
为了让v2ray开机自动运行,在/etc/rc.local
的最后一个exit前面插入下一行:
sleep 10 && screen -dmS v2ray 【v2ray路径】/v2ray -config 【v2ray设置路径】/config.json
其中sleep是为了等待路由器连上外网。
iptables
这里使用iptable进行转发流量的操作。配置如下:
iptables -t nat -N V2RAY
iptables -t nat -A V2RAY -d 【你的服务器ip】 -j RETURN
iptables -t nat -A V2RAY -d 0.0.0.0/8 -j RETURN
iptables -t nat -A V2RAY -d 10.0.0.0/8 -j RETURN
iptables -t nat -A V2RAY -d 127.0.0.0/8 -j RETURN
iptables -t nat -A V2RAY -d 169.254.0.0/16 -j RETURN
iptables -t nat -A V2RAY -d 172.16.0.0/12 -j RETURN
iptables -t nat -A V2RAY -d 192.168.0.0/16 -j RETURN
iptables -t nat -A V2RAY -d 224.0.0.0/4 -j RETURN
iptables -t nat -A V2RAY -d 240.0.0.0/4 -j RETURN
iptables -t nat -A V2RAY -p tcp -j REDIRECT --to-ports 10086
iptables -t nat -A PREROUTING -p tcp -j V2RAY
这里需要注意的是第二行。避免对你的服务器ip也进行转发,这样就会形成一个循环,可能的后果包括网速极慢或压根没法翻墙。
检验
重启路由器看看效果即可。记得关掉你电脑上的翻墙软件。
用户端
我在测试时遇到一个问题:DNS污染。即便已经搭建了一个翻墙的系统,但是在看youtube时被提示DNS服务器无法解析youtube.com的IP地址。因此我的解决方案是让路由器内建一个DNS服务器,利用SecDNS或其他方式转发或查询正确的DNS解析结果。这里推荐的DNS服务器有谷歌的8.8.8.8
,IBM的9.9.9.9
,还有刚刚知道的1.1.1.1
。
小结
我在尝试的时候整体都挺顺利的,唯独卡在了Iptables的转发上。一开始参考了kiri大佬的文章,结果发现并不起作用,遂去网上现学iptables。找到了这篇文章,iptables那部分基本上就是照这个来的。总之好歹是弄好了,而且效果差不多还不错,就发出来了。一方面是分享,一方面是存作备忘吧。
【歪门邪道】在宿舍使用Openwrt路由器实现V2Ray透明代理 由 天空 Blond 采用 知识共享 署名 - 非商业性使用 - 相同方式共享 4.0 国际 许可协议进行许可。
本许可协议授权之外的使用权限可以从 https://skyblond.info/about.html 处获得。
已成功
音乐很赞
谢谢