无线论坛 门户 UBNT优倍快知识库 EdgeMax 查看内容

EdgeMAX EdgeRouter ER-X路由器搭建透明代理

2018-11-6 13:29| 查看: 8990| 评论: 1

在UBNT ER-X原生系统上如何自已搭建代理
分享到: 更多

我写这篇文章的主要原因就是方便自己,以后在遇到特殊的情况诸如雷击之类的灾害时,不至于重新再来翻阅资料一遍,如果你有任何问题,可以留言,或者翻阅官方资料,我更推荐官方资料,因为人家资料齐全。我这个教程只通过我手头有的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://127.0.0.1:1080 google.com


<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() {
  #tcp iptables rules
  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的格式,一不小心就会在这里遇到问题。

不出意外,这时候配置完成就可以无缝浏览了。

参考资料

  1. 官方推荐的白话教程
  2. 官方教程
  3. 本文章首发于惜枫醉的个人博客: http://arkis.me
1

高人
5

专业

握手

霸气

雷人

吐血

山寨

奋斗

刚表态过的朋友 (6 人)

发表评论

最新评论

引用 guduhao 2019-1-10 09:25
学习一下

查看全部评论(1)

站点统计 | Archiver | 手机版 | 无线门户 ( 粤ICP备11076993号|粤公网安备44010602008359号 ) |网站地图

GMT+8, 2024-4-19 14:41

返回顶部