UDM-PRO 策略路由设置随笔记录

2021-11-18 13:34:17 5点赞 29收藏 3评论


UDM-Pro是目前unifi系列中的高端玩意,这货关注了很久了,但是高昂的价格和其高大上的外表挡住了的欲望了,一直心里种草,直到最近没忍住,直接购置了一台。
另一个没有购置的原因是,之前使用的USG,并且通过JSON配置加上shell脚本实现gfwlist分流,名单内域名走旁路OpenWrt,其他直接走USG。用的也挺稳的,UDM-PRO刚出来后系统集大成与一身,好多坑,对于我来说没时间(lan&buhui)折腾。
最近看群友的推荐,说github上面有资源(https://github.com/boostchicken/udm-utilities)可以整dokcer和vpn,于是就简单看了下,确认可以整后果断下单了。
目前,我的网络构建和之前的基本一致,还是利用gfwlist实现分流,只不过目前的方案是在github大神的基础上做了相应的配置和发挥,由于没法使用json配置,所有的均利用shell脚本实现。现就将搭建的过程记录如下:

1. 安装自启动程序,实现开机后自动运行脚本
自启动程序主要用于开机重启后程序的自动运行,实现分流程序正常启动。
1)利用SSH进入udm系统:ssh root@192.168.1.1,其中192.168.1.1是udm-pro的ip地址;
2)进入unifios界面:unifi-os shell;
3)安装自启动程序包并退出:

curl -L https://udm-boot.boostchicken.dev -o udm-boot_1.0.5_all.deb

dpkg -i udm-boot_1.0.5_all.deb

exit

至此,自启动程序安装完毕,在UDM系统中,将任何一个shell可执行脚本文件拷贝进/mnt/data/on_boot.d中就可以实现开机自运行(shell脚本文件应以#!/bin/sh开头)。
(来源:https://github.com/boostchicken/udm-utilities/tree/master/on-boot-script

2. 安装split-vpn主程序
分流使用的主程序。
1)利用SSH进入udm系统(步骤同1.1),如果已经在系统中忽略此步;
2)下载安装脚本并执行,执行后程序将被安装到/mnt/data/split-vpn文件夹中,同时也创建一个配置脚本文件的目录/etc/split-vpn,代码如下:

curl -LSsf https://raw.githubusercontent.com/peacey/split-vpn/main/vpn/install-split-vpn.sh | sh

至此安装完split-vpn主程序。
(来源:https://github.com/peacey/split-vpn

3. 配置分流,实现跳转至局域网内的VPN客户端
根据规则跳转(nexthop)到局域网内的VPN客户端(旁路OpenWrt路由)。
1)创建一个split-vpn配置文件夹,并拷贝/etc/split-vpn/vpn/vpn.conf.sample到此文件夹以便后续修改,代码如下:

mkdir -p /etc/split-vpn/nexthop/mycomputer

cd /etc/split-vpn/nexthop/mycomputer

cp /etc/split-vpn/vpn/vpn.conf.sample vpn.conf

2)根据自己的环境配置/etc/split-vpn/nexthop/mycomputer/vpn.conf文件:

  • 要分流到局域网内的VPN客户端(旁路OpenWrt路由),需要将GATEWAY_TABLE设置为"disabled",不然将无法工作。

  • 将VPN_PROVIDER设置为"nexthop"。

  • 将VPN_ENDPOINT_IPV4和VPN_ENDPOINT_IPV6设置为局域网内VPN客户端所在机器的IP,我的旁路OpenWrt路由IP地址为192.168.1.254,我将VPN_ENDPOINT_IPV4设置为"192.168.1.254",如果有IP6也可以设置IP6地址,没有则无需设置。

  • 将DEV设置为桥联到你局域网内VPN客户端(旁路OpenWrt路由)的接口名称,一般情况下,"br0" 为主LAN口的名称 ,"br6"为VLAN 6 名称(VLAN X 名称为brX);也可以通过ifconfig命令来查看和核实接口名称。

3)在当前目录(/etc/split-vpn/nexthop/mycomputer)运行split-vpn up命令:

/etc/split-vpn/vpn/updown.sh br0 up mycomputer

其中br0为接口名称,mycomputer为局域网内VPN客户端(旁路OpenWrt路由)昵称(可自定义)
如果要恢复到运行前的环境,可以执行如下命令:

cd /etc/split-vpn/nexthop/mycomputer

/etc/split-vpn/vpn/updown.sh br0 down mycomputer

4)确定分流是否正常,Linux可以通过traceroute 域名来追踪,Windows系统可以通过tracert 域名来追踪;
5)如果工作正常,可以在当前文件夹(/etc/split-vpn/nexthop/mycomputer)创建一个名为run-vpn.sh的脚本,便于后续运行,脚本代码:

#!/bin/sh

# Load configuration and bring routes up

cd /etc/split-vpn/nexthop/mycomputer

. ./vpn.conf

/etc/split-vpn/vpn/updown.sh ${DEV} up mycomputer

至此分流配置基本完成。
(来源:https://github.com/peacey/split-vpn

4. 安装自启动脚本
实现开机自启动
1)创建一个主执行文件/etc/split-vpn/run-vpn.sh,并加入如下代码:

#!/bin/sh

/etc/split-vpn/nexthop/mycomputer/run-vpn.sh

2)设置主执行文件权限:

chmod +x /etc/split-vpn/run-vpn.sh

3)安装自启动服务:

curl -o /mnt/data/on_boot.d/99-run-vpn.sh https://raw.githubusercontent.com/peacey/split-vpn/main/examples/boot/run-vpn.sh

chmod +x /mnt/data/on_boot.d/99-run-vpn.sh

至此,开机启动脚本设置完毕。
(来源:https://github.com/peacey/split-vpn

5. 安装并配置域名分流程序(dnsmasq)
此部分利用dnsmasq的ipset的功能实现分流。
1)下载 ipset脚本到/etc/split-vpn/ipsets文件夹中:

cd /etc/split-vpn

curl -Lo split-vpn.zip https://github.com/peacey/split-vpn/archive/main.zip

unzip -qo split-vpn.zip

cp -rf split-vpn-main/ipsets ./ && rm -rf split-vpn-main split-vpn.zip

chmod +x ipsets/*.sh

2)拷贝ipset配置文件:

cd ipsets

cp VPN_domains.conf.sample VPN_domains.conf

3)配置VPN_domains.conf(位于/etc/split-vpn/ipsets/VPN_domains.conf),其中:FORCED_DOMAINS中的域名为分流至局域网内的VPN客户端(旁路OpenWrt路由),EXEMPT_DOMAINS中的域名直接通过UDM;
4)运行/etc/split-vpn/ipsets/add-dnsmasq-ipset.sh,确认没有出现错误;
5)再次修改/etc/split-vpn/nexthop/mycomputer/vpn.conf文件,调整如下内容:

FORCED_IPSETS="VPN_FORCED:dst"

EXEMPT_IPSETS="VPN_EXEMPT:dst"

此外,还需要DNS_IPV4_IP/DNS_IPV6_IP设置为"DHCP",如果dns不使用内置的dnsmasq的话,需要将其设置为提供dns服务的服务器ip;同时设置DNS_IPV4_INTERFACE/DNS_IPV6_INTERFACE桥联的接口名称,使用dnsmasq的话就直接使用br0,设置VLAN X的,使用brx(可参照3.2);
6)重启split-vpn即可生效;
7)如需要加入开机自运行,需要修改启动脚本(/mnt/data/on_boot.d/99-run-vpn.sh),并加入如下代码:

# Add dnsmasq

/mnt/data/split-vpn/ipsets/add-dnsmasq-ipset.sh

(来源:https://github.com/peacey/split-vpn

6. gfwlist分流配置
这部分也是我的需求所在,利用分流实现“文明上网”。
之前我们看到在将利用"VPN_"前缀对域名进行标记"VPN_FORCED"和 "VPN_EXEMPT"(/etc/split-vpn/ipsets/VPN_domains.conf中有描述),并且在运行后会在 /run/dnsmasq.conf.d/ipsets.conf文件中出现如下的配置:

ipset=/xxx.xxx/VPN_EXEMPT4,VPN_EXEMPT6

ipset=/xxx.xxx/VPN_FORCED4,VPN_FORCED6

于是就有了下面的利用gfwlist生成配置的方法。

1)配置文件生成
利用脚本将gfwlist加密文件解析成对于的域名,并在域名前加入ipset=/,在域名后加入/VPN_FORCED4,VPN_FORCED6(意为强制分流旁路)。脚本文件:点击下载
注意的是此脚本无法在UDM中使用,因为里面设计base64解码等依赖,而UDM没有,我目前的解决方案是放在我的VPS主机上解析或者群晖上运行。
脚本中唯一需要修改的位置为:OUT_FILE='/volume1/web/dnsmasq_gfwlist_ipset.conf',将/volume1/web/替换为你需要生成dnsmasq_gfwlist_ipset.conf文件的文件夹绝对路径。

放入VPS主机配置
——将下载下来的gfwlist2dnsmasq.sh放入/root/文件夹中(可以随意放入一个文件夹,记好绝对路径);
——修改OUT_FILE文件位置,由于我的VPS配置了nginx,可以使用nginx来将生成的dnsmasq_gfwlist_ipset.conf发布到网上供下载,所以我设成OUT_FILE='/usr/share/nginx/html/dnsmasq_gfwlist_ipset.conf;
——加入定时运行,打开/etc/crontab文件,最后追加:

0 5 * * * root /root/gfwlist2dnsmasq.sh

表示每天5点钟运行一次shell脚本文件,实现更新dnsmasq_gfwlist_ipset.conf文件。

群晖配置
——将下载下来的gfwlist2dnsmasq.sh放入/Data/文件夹中(可以随意放入一个文件夹,记好绝对路径,目前我的是/volume3/Data);
——修改OUT_FILE文件位置,可以使用自带的web服务来将生成的dnsmasq_gfwlist_ipset.conf发布到内网供下载,所以我设成OUT_FILE='/volume1/web/dnsmasq_gfwlist_ipset.conf';
——进入控制面板-任务计划-新增-计划的任务-用户自定义的脚本
设置任务名称(随意),用户账户选root,
在计划中设置运行时间,我自己设置为每天5点00
任务设置中的用户自定义的脚本填入:/volume3/Data/gfwlist2dnsmasq.sh
(来源:https://github.com/cokebar,并根据需求做了修改,由于本人shell脚本语言菜到家,所以修改的不好,但能用)

2)UDM设置
需要将生成的dnsmasq_gfwlist_ipset.conf文件下载到/run/dnsmasq.conf.d文件夹中,过后再重新启动dnsmasq。
你可以在/etc/split-vpn/ipsets/文件夹中新建一个名为add_dnsmasq_gfwlist_ipset.sh的文件,并加入如下代码:

#!/bin/sh

cd /run/dnsmasq.conf.d

curl -L https://xxxx.xxxx/dnsmasq_gfwlist_ipset.conf -o dnsmasq_gfwlist_ipset.conf

# curl -L http://xxx.xxx.xxx.xxx/dnsmasq_gfwlist_ipset.conf -o dnsmasq_gfwlist_ipset.conf

echo "30 5 * * * /etc/split-vpn/ipsets/add_dnsmasq_gfwlist_ipset.sh" > /etc/cron.d/update_gfwlist

/etc/init.d/crond reload /etc/cron.d/update_gfwlist

killall -HUP dnsmasq

其中:2-4行为网络下载dnsmasq_gfwlist_ipset.conf文件到/run/dnsmasq.conf.d/dnsmasq_gfwlist_ipset.conf(自行修改);5-6为增加定时运行,时间为每天5点30,即5点生成dnsmasq_gfwlist_ipset.conf文件,5点30下载到UDM中,7行为重新加载并运行dnsmasq。

写在最后
最后还需要增加自启动相关设置,需要查看/mnt/data/on_boot.d/99-run-vpn.sh文件:

#!/bin/sh

rm -f /etc/split-vpn

ln -sf /mnt/data/split-vpn /etc/split-vpn

/etc/split-vpn/run-vpn.sh

# Download gfwlist

/mnt/data/split-vpn/ipsets/add_dnsmasq_gfwlist_ipset.sh

# Add dnsmasq

/mnt/data/split-vpn/ipsets/add-dnsmasq-ipset.sh

sleep 300s

rm -f /etc/split-vpn

ln -sf /mnt/data/split-vpn /etc/split-vpn

/etc/split-vpn/run-vpn.sh

# Download gfwlist

/mnt/data/split-vpn/ipsets/add_dnsmasq_gfwlist_ipset.sh

# Add dnsmasq

/mnt/data/split-vpn/ipsets/add-dnsmasq-ipset.sh

为什么要运行两遍呢?主要是发现运行一次后没有分流成功,为了保险起见,在延迟5分钟后再运行一次。

过后就开心的撒花吧~~~~

展开 收起

Xiaomi 小米 BE6500 Pro 双频6500M 家用千兆Mesh无线路由器 Wi-Fi 7

Xiaomi 小米 BE6500 Pro 双频6500M 家用千兆Mesh无线路由器 Wi-Fi 7

549元起

ZTE 中兴 AX3000 巡天版 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 白色

ZTE 中兴 AX3000 巡天版 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 白色

136元起

Xiaomi 小米 AX3000T 双频3000M 家用千兆Mesh路由器 Wi-Fi 6 白色 单个装

Xiaomi 小米 AX3000T 双频3000M 家用千兆Mesh路由器 Wi-Fi 6 白色 单个装

144元起

Xiaomi 小米 RN02 BE6500 家用千兆无线路由器 Wi-Fi 7 黑色 单个装

Xiaomi 小米 RN02 BE6500 家用千兆无线路由器 Wi-Fi 7 黑色 单个装

402元起

ZTE 中兴 巡天 BE5100 千兆双频无线家用路由器 WiFi7

ZTE 中兴 巡天 BE5100 千兆双频无线家用路由器 WiFi7

199元起

京东云 BE6500 千兆无线路由器 WiFi7

京东云 BE6500 千兆无线路由器 WiFi7

429元起

ZTE 中兴 问天BE7200Pro+ 双频7200M 家用千兆Mesh无线路由器 WiFi 7 黑色

ZTE 中兴 问天BE7200Pro+ 双频7200M 家用千兆Mesh无线路由器 WiFi 7 黑色

549元起

Xiaomi 小米 BE3600 2.5G版 3600M 双频千兆家用无线路由器 Wi-Fi 7 白色

Xiaomi 小米 BE3600 2.5G版 3600M 双频千兆家用无线路由器 Wi-Fi 7 白色

169.15元起

京东云 雅典娜 三频6600M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 黑色

京东云 雅典娜 三频6600M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 黑色

375.2元起

HUAWEI 华为 BE3 Pro 双频3600M 千兆家用路由器 Wi-Fi 7 黑色

HUAWEI 华为 BE3 Pro 双频3600M 千兆家用路由器 Wi-Fi 7 黑色

205元起

ZTE 中兴 巡天 BE5100Pro+ 无线路由器

ZTE 中兴 巡天 BE5100Pro+ 无线路由器

329元起

Xiaomi 小米 BE7000 三频千兆Mesh无线路由器 Wi-Fi 7

Xiaomi 小米 BE7000 三频千兆Mesh无线路由器 Wi-Fi 7

669元起

Xiaomi 小米 BE5000 5000Mbps 家用千兆无线路由器 Wi-Fi 7

Xiaomi 小米 BE5000 5000Mbps 家用千兆无线路由器 Wi-Fi 7

279元起

TP-LINK 普联 BE7200 单2.5G网口 双频6500M 家用千兆Mesh无线路由器 Wi-Fi 7 黑色 单个装 7DR7230

TP-LINK 普联 BE7200 单2.5G网口 双频6500M 家用千兆Mesh无线路由器 Wi-Fi 7 黑色 单个装 7DR7230

449元起

ASUS 华硕 RT-BE86U 双频6800M 家用万兆Mesh路由器 Wi-Fi 7 黑色 单个装

ASUS 华硕 RT-BE86U 双频6800M 家用万兆Mesh路由器 Wi-Fi 7 黑色 单个装

1599元起

ZTE 中兴 F50 5G 随身wifi移动UFI Wi-Fi 5

ZTE 中兴 F50 5G 随身wifi移动UFI Wi-Fi 5

359元起
3评论

  • 精彩
  • 最新
  • “另一个没有购置的原因是,之前使用的USG,并且通过JSON配置加上shell脚本实现gfwlist分流,名单内域名走旁路OpenWrt,其他直接走USG。用的也挺稳的,。。。”

    你好,我非常想尝试你这个方案,但是网上找了很久没有找到相关教程,特地向你请教,

    校验提示文案

    提交
  • 这么硬核的文章必须去点个赞!话说通过这个方式能不能实现白名单模式?

    校验提示文案

    提交
  • 我想问问楼主,有没有unifi OS电信桥接看iptv的办法?谢谢

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章

vaguecupid

Ta还没有介绍自己

关注 打赏
最新文章 热门文章
29
扫一下,分享更方便,购买更轻松