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

2021-11-18 13:34:17 5点赞 25收藏 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 小米 AX3000T 双频3000M 家用千兆Mesh路由器 Wi-Fi 6 白色 单个装

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

89.5元起

ASUS 华硕 RT-BE88U 双频7200M 家用Mesh无线路由器 Wi-Fi 7 黑色 单个装

ASUS 华硕 RT-BE88U 双频7200M 家用Mesh无线路由器 Wi-Fi 7 黑色 单个装

1999元起

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

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

535元起

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

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

159元起

Redmi 红米 AX6000 双频5952M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装黑色

Redmi 红米 AX6000 双频5952M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装黑色

299元起

Xiaomi 小米 AX6000 双频6000M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 黑色

Xiaomi 小米 AX6000 双频6000M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 黑色

339元起

Ruijie 锐捷 天蝎X60new 双频6000M 家用千兆Mesh无线路由器 Wi-Fi 6 黑色 单个装

Ruijie 锐捷 天蝎X60new 双频6000M 家用千兆Mesh无线路由器 Wi-Fi 6 黑色 单个装

379元起

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

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

279元起

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

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

189元起

ASUS 华硕 TUF小旋风Pro BE6500 家用无线千兆路由器 WiFi7

ASUS 华硕 TUF小旋风Pro BE6500 家用无线千兆路由器 WiFi7

799元起

Ruijie 锐捷 天蝎BE72Pro 双频7200M 家用千兆Mesh无线路由器 Wi-Fi 7 黑色 单个装

Ruijie 锐捷 天蝎BE72Pro 双频7200M 家用千兆Mesh无线路由器 Wi-Fi 7 黑色 单个装

695.51元起

ASUS 华硕 TUF 小旋风 BE3600 WiFi7 电竞路由器

ASUS 华硕 TUF 小旋风 BE3600 WiFi7 电竞路由器

499元起

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

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

569元起

Ruijie 锐捷 雪豹 X30E 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 白色 单个装

Ruijie 锐捷 雪豹 X30E 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 白色 单个装

148.21元起

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

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

579元起

ASUS 华硕 天选 TX-AX6000 双频6000M 家用千兆Mesh无线路由器 Wi-Fi 6 黑色 单个装

ASUS 华硕 天选 TX-AX6000 双频6000M 家用千兆Mesh无线路由器 Wi-Fi 6 黑色 单个装

649元起
3评论

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

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

    校验提示文案

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

    校验提示文案

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

    校验提示文案

    提交
提示信息

取消
确认
评论举报

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

相关文章推荐

更多精彩文章
更多精彩文章
天猫超级红包
距结束::
每天领现金,最高24888元
红包按钮

vaguecupid

Ta还没有介绍自己

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