我写这篇文章的主要原因就是方便自己,以后在遇到特殊的情况诸如雷击之类的灾害时,不至于重新再来翻阅资料一遍,如果你有任何问题,可以留言,或者翻阅官方资料,我更推荐官方资料,因为人家资料齐全。我这个教程只通过我手头有的mipsel架构的路由器进行的操作,当然你可以举一反三,自行的架设在其他路由上。 我喜欢翻阅电子技术及互联网技术的相关资料,由于众所周知的原因,在防火墙内访问一些技术站点通常会遇到速度慢或404等问题。之前都是简单的搭建一个\$\$服务让PC可以使用。 现在这次的目的是在家庭里搭建一个网关,让所有的设备包括手机、电脑、PS4等都可以做到无感知访问相关站点,即一劳永逸,避免重复设置。 方案选择了V2RAY,以下我都用Ray来代替。 Ray相比于其他Chi**DNS \$\$ -redir \$\$-tunnel KCPtun的混合体来说,操作更加简便,当然配置也会相对复杂,不过理解了思路后,会有一种豁然开朗的感觉。事实上我没仔细关它的实现方式,,我大致理解了其逻辑,如果大家有兴趣完全可以参考官方站点搭建灵活的科学实验工具。 我这里只是简单的按照官方推荐的教程,搭建了家里的透明代理。大约花了我2小时的时间。
材料 1.一台EdgeMax ERX路由器。 这个路由器在2017年我给了她很高很高的评价,作为一个不到300块的路由器,带有POE供电、256M的Flash、256M的RAM,原生debian系统。处理器是MT7621,带硬件转发。我觉得是相当值了,可玩性也非常高。而且重点是它不带无线!我非常喜欢,我就想有个简单可靠的铁盒子放在弱电箱里。 2.一台防火墙外的服务器 给你提供出路。 3.不怕失败的决心。
操作步骤 0.开篇注意事项 服务器时间和路由器时间保持一致,时区没有关系,精确至分钟即可。 确保你的路由器有支持的Ray版本,如果不支持,你可能得下载源码自己编译。 Ray对硬件要求也挺高的,至少需要32M的内存,推荐64M或更多的内存,如果你的内存不足,还是洗洗睡觉吧不要熬夜看ray了,不行的。 如果你配置文件一般在哪里都不知道的话,我建议你查询互联网或者稍微补充一下linux基础,这篇文章可能不适合你。 1.在服务器上搭建Ray。 使用SSH登陆海外linux服务器 运行脚本直接安装。 bash <(curl -L -s https://install.direct/go.sh)
使用如下配置文件 {
"log" : {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "warning"
},
"inbound": {
"port": 443,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "你自己的UUID",
"level": 1,
"alterId": 64
}
],
"detour": {
"to": "dynamicPort"
}
}
},
"inboundDetour":[
{
"protocol": "vmess",
"port": "10000-20000",
"tag": "dynamicPort",
"settings": {
"default": {
"level": 1,
"alterId": 32
}
},
"allocate": {
"strategy": "random",
"concurrency": 2,
"refresh": 3
}
}
],
"streamSettings": {
"network": "kcp",
"kcpSettings": {
"mtu": 1350,
"tti": 20,
"uplinkCapacity": 5,
"downlinkCapacity": 100,
"congestion": false,
"readBufferSize": 1,
"writeBufferSize": 1,
"header": {
"type": "none"
}
}
},
"outbound": {
"protocol": "freedom",
"settings": {}
},
"outboundDetour": [
{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}
],
"routing": {
"strategy": "rules",
"settings": {
"rules": [
{
"type": "field",
"ip": [
"0.0.0.0/8",
"10.0.0.0/8",
"100.64.0.0/10",
"127.0.0.0/8",
"169.254.0.0/16",
"172.16.0.0/12",
"192.0.0.0/24",
"192.0.2.0/24",
"192.168.0.0/16",
"198.18.0.0/15",
"198.51.100.0/24",
"203.0.113.0/24",
"::1/128",
"fc00::/7",
"fe80::/10"
],
"outboundTag": "blocked"
}
]
}
}
}
注意事项: root权限。 如果不支持yum和apt-get,请自行安装unzip和daemon。 请务必使用专用的UUID生成工具生成,否则自行修改的UUID很可能有问题。 请务必使用诸如VS Code之类的编辑器编辑JSON,否则光是格式上的错误,就够你喝一壶,浪费几小时了。 如果想理解这些配置是干啥用的,参考资料中的《官方推荐的白话教程》可能适合你。 vps文件传输可以方便的使用lrzsz,不需要安装额外的诸如ftp之类的软件。 2.在路由器上安装Ray ERX路由比较好的就是有原生的debian,所以这里我们可以直接在ERX安装相应的支持包,不过得先更新一下源。我已经用上了最新的EdgeRouter X 1.10.0。在设置完成可以通过PPPOE上网后,进行如下操作。 2.1 更新源 在2.1系统中我们看到官方的软件包库不见了,所以我们要自己添加源。 使用 ssh 登陆路由器 root权限及编辑sources.list sudo -i
vi /etc/apt/sources.list
写入软件源 deb http://http.us.debian.org/debian wheezy main contrib non-free
更新软件源 apt-get update
这部主要是为了安装unzip和daemon apt-get install unzip
apt-get install daemon
安装完毕后 有两种方式安装v2ray,一种可以参考本文的第一步直接安装,不过它的脚本判断为mips,并非mipsel,我怕这么安装出问题,所以我选用了本地安装的方式。 这里放一下官方的安装包和脚本,如果是最新版本的话,还是建议到官方去下载,下载链接可以参考参考资料中的官方教程,具体连接我不放了。 安装脚本 mipsel安装包 使用WinSCP登陆路由器,进入tmp目录,拖进去安装脚本和mipsel安装包 chmod +x erx-install.sh
./erx-install.sh -l ./v2ray-linux-mips.zip
一般这么操作,ray就安装完毕了,如果有其他问题可以反馈一下,我没遇到过,这么一搞就安装成功了。 Archive: v2ray-v3.10-linux-mips.zip
creating: /tmp/v2ray/v2ray-v3.10-linux-mips/
inflating: /tmp/v2ray/v2ray-v3.10-linux-mips/geoip.dat
inflating: /tmp/v2ray/v2ray-v3.10-linux-mips/geosite.dat
inflating: /tmp/v2ray/v2ray-v3.10-linux-mips/readme.md
creating: /tmp/v2ray/v2ray-v3.10-linux-mips/systemd/
inflating: /tmp/v2ray/v2ray-v3.10-linux-mips/systemd/v2ray.service
creating: /tmp/v2ray/v2ray-v3.10-linux-mips/systemv/
inflating: /tmp/v2ray/v2ray-v3.10-linux-mips/systemv/v2ray
inflating: /tmp/v2ray/v2ray-v3.10-linux-mips/v2ctl
inflating: /tmp/v2ray/v2ray-v3.10-linux-mips/v2ctl.sig
inflating: /tmp/v2ray/v2ray-v3.10-linux-mips/v2ray
inflating: /tmp/v2ray/v2ray-v3.10-linux-mips/v2ray.sig
inflating: /tmp/v2ray/v2ray-v3.10-linux-mips/vpoint_socks_vmess.json
inflating: /tmp/v2ray/v2ray-v3.10-linux-mips/vpoint_vmess_freedom.json
PORT:27016
UUID:542fbf50-82e7-41ad-8735-0081a3cf9a18
Adding system startup for /etc/init.d/v2ray ...
/etc/rc0.d/K20v2ray -> ../init.d/v2ray
/etc/rc1.d/K20v2ray -> ../init.d/v2ray
/etc/rc6.d/K20v2ray -> ../init.d/v2ray
/etc/rc2.d/S20v2ray -> ../init.d/v2ray
/etc/rc3.d/S20v2ray -> ../init.d/v2ray
/etc/rc4.d/S20v2ray -> ../init.d/v2ray
/etc/rc5.d/S20v2ray -> ../init.d/v2ray
V2Ray v3.10 is installed.
方便快速。 接下来就是修改配置文件 使用如下配置文件 {
"log" : {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "warning"
},
"inbound": {
"port": 1080,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false,
"ip": "0.0.0.0"
}
},
"inboundDetour": [
{
"domainOverride": ["tls","http"],
"port": 你的端口,
"protocol": "dokodemo-door",
"settings": {
"network": "tcp,udp",
"followRedirect": true
}
}
],
"streamSettings": {
"network": "kcp",
"kcpSettings": {
"mtu": 1350,
"tti": 20,
"uplinkCapacity": 5,
"downlinkCapacity": 100,
"congestion": false,
"readBufferSize": 1,
"writeBufferSize": 1,
"header": {
"type": "none"
}
}
},
"outbound": {
"protocol": "vmess",
"settings": {
"vnext":[
{
"address":"你的VPS IP地址",
"port": 443,
"users":[
{
"id":"你的UUID",
"level":1,
"alterId":64
}
]
}
]
}
},
"outboundDetour": [
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},
{
"protocol": "blackhole",
"settings": {},
"tag": "adblock"
}
],
"routing": {
"strategy": "rules",
"settings": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{
"type": "chinasites",
"outboundTag": "direct"
},
{
"type": "chinaip",
"outboundTag": "direct"
},
{
"domain": [
"tanx.com",
"googeadsserving.cn",
"baidu.com"
],
"type": "field",
"outboundTag": "adblock"
},
{
"domain": [
"amazon.com",
"microsoft.com",
"jd.com",
"youku.com",
"baidu.com"
],
"type": "field",
"outboundTag": "direct"
},
{
"type": "field",
"ip": [
"0.0.0.0/8",
"10.0.0.0/8",
"100.64.0.0/10",
"127.0.0.0/8",
"169.254.0.0/16",
"172.16.0.0/12",
"192.0.0.0/24",
"192.0.2.0/24",
"192.168.0.0/16",
"198.18.0.0/15",
"198.51.100.0/24",
"203.0.113.0/24",
"::1/128",
"fc00::/7",
"fe80::/10"
],
"outboundTag": "direct"
}
]
}
}
}
上面的json中包含了error信息,我建议把这些消息屏蔽掉,毕竟是路由器。 修改好配置文件内容后,拷贝至/etc/v2ray/config.json并重启服务,使用curl测试谷歌访问,如果看到如下信息,就说明你成功了。 mv /tmp/config.json /etc/v2ray/
/etc/init.d/v2ray restart
curl -x socks5:
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
如果你的配置文件一直都有问题,那么我建议你先不急着上路由器,先在家用电脑上用ray的客户端试试看配置文件。没问题后再上到路由上。一样,如果你想知道这些配置文件做什么的,那么我建议你还是要仔细看下官方的推荐教程,看代码是比较难看懂的。 接下来是几条iptables规则,让路由器内网的流量流入我们的ray。 #!/bin/sh
configIptables() {
iptables -t nat -N V2RAY
iptables -t nat -N V2RAY_FILTER
iptables -t nat -A PREROUTING -p tcp -j V2RAY_FILTER
iptables -t nat -A V2RAY_FILTER -d 127.0.0.0/8 -j RETURN
iptables -t nat -A V2RAY_FILTER -d 192.168.0.0/16 -j RETURN
iptables -t nat -A V2RAY_FILTER -j V2RAY
iptables -t nat -A V2RAY -p tcp -j REDIRECT --to-ports 10490
}
configIptables
以上代码保存为update_iptables 保存到 ERX 的 /config/scripts/post-config.d/ 目录,那样即使设备重启了,iptables也会自动更新。 注意事项: update_iptables 注意加上可执行权限。 不支持UDP,由于ERX官方iptables不支持TPROXY,所以UDP我这边就没有放上来。目前正在解决中,如果有大神能够指导那是最好的。 UUID服务器和设备上的要一致,再三提醒注意UUID和JSON的格式,一不小心就会在这里遇到问题。 不出意外,这时候配置完成就可以无缝浏览了。 参考资料 - 官方推荐的白话教程
- 官方教程
- 本文章首发于惜枫醉的个人博客: http://arkis.me
|