Openwrt 透明网关(改进版)
之前用一台旧的 Openwrt 无线路由器作为二级路由器,通过连接这台无线路由器来实现一个透明网关的效果,其实一直用得还不错。
今天突发奇想,琢磨着能否将 V2Ray 安装在主路由上,并配置两个 VLAN。一个 VLAN 用作家庭网络,不走代理;另一个 VLAN 则将所有流量导向 V2Ray,同样可以达到透明网关的效果。这样不仅可以减少一台用电设备,让那台旧路由器退休;还有一个好处就是可以让代理地址变为 192.168.1.1
,方便好记。由于我家当前使用群晖 NAS 作为主软路由,CPU 为 Intel Celeron J3455,所以在路由器上跑个 V2Ray 问题不算不大。
如果不知道如何在群晖 NAS 上搭建软路由,我之后会另写一篇文章说明,这里不展开了。
一、配置VLAN
VLAN(Virtual Local Area Network)虚拟局域网,是一种构建区域网络交换的网络技术,作用是在逻辑上分隔局域网。虽然在网络布线上并没有组成两个网络,一旦配置了VLAN就形同在存在两个相隔的局域网。
我这里使用VLAN的目的是将上网和留学分隔开,使用两个不同的 SSID 分别接入不同的 VLAN。在留学 VLAN 中搭建透明网关,实现随时随地学英语的良好氛围。
家中的硬件部分使用了 Unifi 的设备,包括一台8口POE交换机、一台吸顶AP和一台墙面AP,所以这部分的配置使用的是Unifi的控制器程序。
以下我将留学 VLAN 的 ID 设置为 20
。
1、配置 SSID:
创建新的无线网络,并设置其VLAN。
2、配置 Networks:
创建新的网络,并定义VLAN。
3、配置路由器
在路由器中新建 Interface
,并配置网段为 192.168.20.1/24
。
物理网卡配置为 eth0.20
,表示在物理网卡eth0上创建ID为20的VLAN。因为都是遵循 IEEE 802.1Q
协议,所以可以直接识别由交换机发来的数据包。这样就能自动将相同VLAN的无线网络接入这个Interface了。
最后新建防火墙Zone,并隔断此Zone与其他Zone的转发。为什么要隔断?后面会提到。
二、安装V2Ray
1、下载安装包
为了方便安装配置,我使用了Github上 kuoruan 专为openwrt制作的 openwrt-v2ray 和 luci-app-v2ray 。可以在 releases 中直接下载 ipk 进行安装,也可以添加到opkg仓库使用install命令安装。我选择了直接下载ipk包进行安装。
# 连接路由器
ssh [email protected]
# 下载v2ray本体
wget https://github.com/kuoruan/openwrt-v2ray/releases/download/{version}/v2ray-core_{version}_x86_64.ipk
# 下载luci界面
wget https://github.com/kuoruan/luci-app-v2ray/releases/download/{version}/luci-app-v2ray_{version}_all.ipk
2、安装
opkg update
opkg install v2ray-core*.ipk
opkg install luci-app-v2ray*.ipk
3、配置
安装成功后,在 Services
中会出现 V2Ray
这一项,点进去后就可以对V2Ray进行配置了。
我尝试着用了一下使用luci进行配置,发现比较麻烦。索性直接使用配置文件进行配置,只需在 Config file
写入配置文件的路径即可,我将配置文件放在了 /etc/v2ray/config.json
,如下图。
接下来是编写配置文件,V2Ray配置文件的编写可以参考官方文档。
我在配置文件中同时配置了 3 种 inbounds,分别是 :
- socks:端口1080,用于接受socks代理
- http:端口8080,用于接受http代理
- dokodemo-door:端口3456,用于接受TCP流量转发
"inbounds": [
{
"protocol": "socks",
"listen": "0.0.0.0",
"port": 1080,
"settings": {
"auth": "noauth"
},
"sniffing": {
"enabled": true,
"destOverride": ["http","tls"]
}
},
{
"protocol": "http",
"listen": "0.0.0.0",
"port": 8080,
"settings": {
"allowTransparent": true
},
"sniffing": {
"enabled": false
}
},
{
"protocol": "dokodemo-door",
"listen": "0.0.0.0",
"port": 3456,
"settings": {
"followRedirect": true,
"network": "tcp,udp"
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
}
}
]
outbounds 则配置了自己在vps上搭建的服务器信息。
"outbounds": [
{
"tag": "vps",
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "{your domain}",
"port": 443,
"users": [
{ "id": "{udid}", "alterId": 64 }
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"wsSettings": {
"path": "/ray"
}
}
},
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
},
{
"tag": "block",
"protocol": "blackhole",
"settings": {}
}
]
保存并生效后先做一下测试,在浏览器的代理插件中配置代理地址 192.168.1.1
,端口 1080
,类型是 socks5
。访问一下google如果可以正常访问,则说明V2Ray配置成功。
三、流量转发
在上一篇关于使用闲置路由器配置透明网关的文章中,我仿照V2Ray官网的资料使用iptables进行流量转发。不熟悉iptables的留学生们恐怕会比较为难。在我不断搜寻后,终于找到了不使用iptables的配置的方法(传送门)。只需要配置一下端口转发就可以实现的功能,实在是再好不过了。
上面第一部分提到将留学VLAN的防火墙Zone设置成与其他Zone完全隔断,是因为希望这个VLAN中的流量全都经由V2Ray处理后再转发出去。
配置流量转发,可以通过编辑 /etc/config/firewall
进行配置,也可以通过 luci 界面进行配置,两者是完全等价的。我研究了两者的关系后,最后采用在 luci 中添加配置。
进入 Network
-> Firewall
-> Port Forwards
,新建端口转发。
添加、保存并生效,可以看到在 Port Forwards 列表中新增了一行内容。这样就把所有留学VLAN中的流量全部转发到V2Ray的入站端口去了。
用手机快试试,如果不出岔子的话,以后就能在家里快乐得学习英语了。