You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Synology RT2600AC作为OpenVPN服务器时,如何保留路由配置以实现访问OpenVPN客户端局域网?

Synology RT2600AC作为OpenVPN服务器时,如何保留路由配置以实现访问OpenVPN客户端局域网?

兄弟,我太懂你这种头疼的情况了——远端路由器因为LTE的CGNAT没法当OpenVPN服务器,只能反过来连群晖RT2600AC的服务器,结果加好的路由每次重启就没了,本地网根本访不到远端的设备。别慌,给你几个靠谱的解决办法,都是能让配置持久化的:

方法一:用群晖Web界面加静态路由(最省心,不用碰命令行)

这是最稳妥的方式,直接在路由器系统里把路由存成静态的,重启也不会丢:

  • 登录群晖RT2600AC的管理后台(一般输router.synology.com就能进)
  • 找到「网络中心」→「静态路由」,点「新增」
  • 按实际情况填信息:
    • 目标网络:就是远端路由器后面的设备所在的局域网网段,比如你的远端设备都是192.168.3.0/24,就填这个
    • 网关:填远端OpenVPN客户端连上来后分配的固定VPN IP(你可以在群晖「VPN服务器」→「OpenVPN」→「客户端」列表里看到,或者提前给客户端分配固定IP)
    • 接口:选OpenVPN对应的接口,一般是tun0,或者直接选「VPN」分类里的对应项
  • 保存之后,这个路由就会一直存在,不管重启路由器还是OpenVPN服务都不会丢。

方法二:修改群晖OpenVPN服务器的配置模板(让服务器自动推送路由)

如果你想让所有连上来的OpenVPN客户端都能拿到这个路由,或者让服务器本身自动加载路由,就改服务器的配置模板:

  • 先开群晖的SSH功能:进「系统管理」→「终端机和SNMP」,勾选「启用SSH服务」,设个端口(比如默认22就行)
  • 用SSH工具登录路由器,用管理员账号密码进去
  • 先备份原配置文件,以防改错:
    cp /usr/syno/etc/packages/VPNCenter/openvpn/ovpn_template.conf /usr/syno/etc/packages/VPNCenter/openvpn/ovpn_template.conf.bak
    
  • 编辑模板文件:
    vi /usr/syno/etc/packages/VPNCenter/openvpn/ovpn_template.conf
    
  • 在文件里加一行(替换成你远端的局域网网段):
    push "route 192.168.3.0 255.255.255.0"
    
    这行是让服务器把远端子网的路由推送给所有客户端,如果你还需要群晖本地网络能访问远端,还要在服务器端加静态路由(参考方法一),或者在模板里加服务器端的路由指令:
    route 192.168.3.0 255.255.255.0 <客户端固定VPN IP>
    
  • 保存退出后,重启OpenVPN服务生效:
    synoservicecfg --restart pkgctl-VPNCenter
    
    之后不管服务器怎么重启,这个配置都会自动加载。

方法三:用开机脚本自动加路由(适合复杂场景)

如果上面两种方法都不适用,比如你需要更灵活的路由逻辑,可以整个开机脚本,让路由器每次启动都自动加路由:

  • 先给远端OpenVPN客户端分配固定VPN IP:进群晖「VPN服务器」→「OpenVPN」→「设置」→「静态IP地址分配」,添加客户端的通用名称(CN)和对应的固定IP,比如10.8.0.6
  • SSH登录路由器,创建一个脚本文件:
    vi /usr/local/etc/rc.d/add_vpn_route.sh
    
  • 写入脚本内容(替换成你的远端网段和客户端固定VPN IP):
    #!/bin/sh
    sleep 60 # 等OpenVPN服务完全启动再执行
    ip route add 192.168.3.0/24 via 10.8.0.6 dev tun0
    
  • 给脚本加执行权限:
    chmod +x /usr/local/etc/rc.d/add_vpn_route.sh
    
    这样路由器每次开机,都会自动跑这个脚本把路由加上,再也不用手动操作了。

为啥你之前加的路由会丢?大概率是你直接修改的是客户端临时生成的配置文件,或者客户端的配置会被系统自动重置,所以必须在服务器端做持久化配置,或者用系统级的静态路由/脚本才行。

备注:内容来源于stack exchange,提问作者MJA

火山引擎 最新活动