OpenWrt 如何优雅的连接群晖创建的 openvpn

本文介绍如何在 openwrt 中配置 openvpn 以便连接链接群晖的openvpn server, 实现异地组网.
当然, 群晖那一侧的网络, 无法访问 openwrt 这一侧的局域网, 如果一定要做的话, 可能需要修改路由表, 并让网网关转发数据.
由于我只有单向访问的需求, 所以也基本够用了.

前提

  1. 你网络需要有公网IP, IPv4 或者IPv6 都可以, 或者其他诸如花生壳之类的内网穿透也可以.
  2. 你有一个动态域名, 可以由动态域名解析到你的服务器地址.
  3. 下面的介绍, 以 OpenVPN 插件版本 25.179.55458 为例, 其他版本可以作为参考.

群晖侧

1. 安装 VPNServer

你需要安装 VPNServer, 如果市场找不到, 可以从官网下载.https://www.synology.com/zh-tw/support/download/DS925+?version=7.3#packages
根据实际设备型号, 选择合适的安装包.

2. 配置

打开VPN Server, 左侧找到 OpenVPN, 选择启用.
记得钩上允许客户端访问服务器的LAN, 其他选项可以保持默认.

设置好之后, 点击应用.
如果启动了群晖的防火墙, 记得开放你设置的端口.
接下来, 根据你的路由器系统, 开放群晖的这个 OpenVPN 端口号.
如果ipv6 则需要可能需要设置转发规则.

3. 导出配置

回到 VPNServer, 点击下方的导出配置按钮, 你会获得一个压缩包, 解压后, 用文本编辑器打开 VPNConfig.ovpn,
找到 remote 哪一行, 设置为你的 ddns 域名和之前开放的端口, 例如
remote xxx.example.com 5228
结束后, 保存即可.

4. 创建一个专用账号(可选)

因为后面会把密码的明文写到配置文件, 如果担心密码泄漏, 可以为 openvpn 单独创建一个账号, 并拒绝掉不相关的权限.

Openwrt 侧

Openwrt 这边, 可以用 luci-app-openvpn 插件作为客户端.
你需要编译的时候加入 OpenVPN, 如果原版的系统、immortalwrt 也可以在软件管理中自行安装.

1. 导入配置

打开 VPN > OpenVPN, 有一个 OVPN 配置文件上传的选项, 选择之前编辑好的 OpenVPN 文件并上传.

2. 编辑配置文件

页面上找到刚创建好的配置, 点击编辑.
然后在下面文本框中输入群晖的用户名密码. 例如

1
2
zhangsan
1234

然后复制这个密码文件的路径(文本框上面有注明路径)
粘贴到配置文件中的 auth-user-pass 段中.如:

1
auth-user-pass /etc/openvpn/dsmvpn.auth

效果如下

3.启动

回到上一页后, 对刚才的 VPN 配置文件勾选上启用. 点击保存并应用.
等到已启动变成 后进行下一步.
如果没有自动启动, 可以点一下 start 手动启动.

4. 配置防火墙

其实这个时候, 路由器已经可以链接到群晖了, 但是网络中其他的电脑还不能访问到群晖, 以及群晖所在的子网.
配置一下防火墙就好了.
依次选择 网络 > 防火墙, 滚动到页面底部, 找到区域 中的 wan, 点击编辑按钮.
在编辑页面中, 切换到 高级设置 选项卡, 找到 覆盖的设备 选项.
在下拉列表中, 找到一个 tun0 的设备, x 是一个数字, 一般是 0, 也就是 tun0, 勾选后保存并应用.
这个时候, 应该就可以访问群晖以及群晖所在的子网了.
这一步也可以参考官方文档https://openwrt.org/docs/guide-user/services/vpn/openvpn/client-luci

出现问题的排查思路

1. 检查配置文件本身没有问题

这一步可以通过在你的电脑/移动设备上下载一个 openvpn connect 客户端, 先试试这个配置文件能不能连上.
如果不能连上, 那么继续往下排查

1.1. 用群晖的管理员可以连上, 但是单独创建的专用账号连不上

此时应该检查权限是否正确. 比如 VPNSever 左侧有一个权限选项, 检查是否钩上.

1.2. 无论谁都连不上

此时检查网络是否正常.

  1. 动态域名的解析的 IP 是否对的上
  2. 如果网络环境是IPV6, 但是动态域名绑定的是路由器的IP, 那可能需要为群晖单独设置一个动态域名.
  3. 如果IP 无误, 检查端口是否能链接, 例如使用 netcat 工具检查端口是否能链接. 如果被屏蔽, 换一个端口号试试.

2. 如果电脑上可以链接, 但是路由器不行

这里先要确定是路由器上策略配置的问题还是防火墙设置的问题.

2.1. 在路由器上直接测试一下, 是否可以访问群晖的内网地址

如果不行, 那就是策略配置有问题, 检查用户名, 密码, 路径等是否正确配置.

2.1. 路由器可以访问群晖内网地址, 但是访问不了内网中其他设备.

看看群晖中的 VPNServer, 看看是否勾选了允许客户端访问服务器的LAN.

2.2. 路由器可以任意访问, 但是电脑不可以

检查防火墙中的设备是否设置正确.

至此, 应该大部分问题就可以解决了. 其他问题需要结合日志再看.