BACRouter与VPN

基于OpenWRT平台,BACRouter可以支持众多VPN协议,包括OpenVPN, wireguard, IPSec,等等。为了节省板上存储空间以存入应用程序,在默认情况下,VPN的支持并未启用。

我们的 OpenWRT 代码托管于 https://github.com/hvacrcontrol/openwrt, 代码分支 “bacrouter_new” 就是目前的生产代码。

代码仓库内的 vpn.config 就是 VPN 的配置文件,其中已使能 OpenVPN 与 wireguard

以上述配置编译的 OpenWRT 固件文件在这里下载: vpn_bacrouter_19.07_8fe8c902.tar.gz

关于如何使用上述固件文件升级,请参考 升级BACRouter底层固件

有时,我们需要在VPN侧运行BIP,从v4.23起的BACRouter固件 将支持本功能。下面简要说明如何配置它:

更新 Openwrt VPN 版固件,及 BACRouter 固件>= v4.23

先配置好 VPN, 以下以wiregurad 为例:

~#uci show network.vpn
network.vpn.proto=’wireguard’
network.vpn.private_key=’####################################’
network.vpn.addresses=’192.168.231.3/24′

~#uci show network.wg0
network.wg0=wireguard_vpn
network.wg0.public_key=’#####################################’
network.wg0.endpoint_host=’###.###.###.###’
network.wg0.endpoint_port=’####’
network.wg0.route_allowed_ips=’1′
network.wg0.persistent_keepalive=’25’
network.wg0.allowed_ips=’192.168.231.0/24′

有关 wireguard 的配置请参考: https://openwrt.org/docs/guide-user/services/vpn/wireguard/start

~#ifconfig vpn
vpn Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.231.3 P-t-P:192.168.231.3 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MTU:1420 Metric:1
RX packets:557 errors:0 dropped:0 overruns:0 frame:0
TX packets:3593 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:50348 (49.1 KiB) TX bytes:176736 (172.5 KiB)

将 vpn 接口加入到 BACRouter:
原始的/root/resource.conf:

~#cat /root/resource.conf
{ “eth0”: { “type”: “ETH”, “ifname”: “br-lan” }, “RS485-1”: { “type”: “USB”, “ifname”: “0:0” }, “RS485-2”: { “type”: “USB”, “ifname”: “0:1” } }

修改/root/resource.conf(您也可以用vi编辑)

~#cat >/root/resource.conf
{ “vpn0”: { “type”: “PPP”, “ifname”: “vpn”}, “eth0”: { “type”: “ETH”, “ifname”: “br-lan” }, “RS485-1”: { “type”: “USB”, “ifname”: “0:0” }, “RS485-2”: { “type”: “USB”, “ifname”: “0:1” } }
CTRL+D

因为 wireguard 工作于第三层 (tun 模式), 所以 vpn0 的类型定义为 “PPP”。对于工作于 tap 模式的VPN,必须使用 “ETH” 类型。

重启 WebUI, “系统设定”页面将显示如下:

创建另一个BIP端口,指定硬件为 “vpn0″。因为这是一个”PPP”接口,所以只有“外部设备”与“广播管理设备” 2种模式可用。

注意:当WebUI与BACRouter应用程序启动时,将读取所有的接口IP信息,所以所有接口必须采用静态配置。对于 wireguard 这不是问题,因为其 ip 是静态配置的。

对于 OpenVPN 的 tun 模式,请参考:给OpenVPN客户端分配静态IP地址 。 在OpenVPN客户端启动时,其需要时间与服务器建立连接并得到IP。下面示例启动脚本事先静态配置 tun0 接口的IP地址,以避免webui启动失败:

~#cat /etc/rc.local
ip tuntap add dev tun0 mode tun
ip link set tun0 up
ip addr add 192.168.231.3/24 dev tun0
/etc/init.d/openvpn start
cd /root
./webui&
exit 0

当 OpenVPN 的tap模式可用时,采用以太网网桥方式是最简单的,如此任何应用层设定都不需要调整。

关于BMS与VPN的精彩博客

升级BACRouter底层固件

BACRouter的底层平台是OpenWRT。自2016年发布以来,OpenWRT的版本未曾更新。安全审计机构时有报告内置的dropbear服务器有漏洞,虽然经我们评估,这些漏洞在BACRouter的应用场景下无法被利用。

不管怎样,我们决定将OpenWRT的版本升级到v19.07.10,这一版本发布于2022年4月20日。对于想升级的老客户,将照以下步骤执行:

1.  下载OpenWRT更新包

2.  在WebUI的“升级固件”功能中选用上述更新包。更新将持续二至三分钟时间。请注意,所有的设定,包括IP都将丢失。

3.  用浏览器打开”http://192.168.100.1″,页面将显示:

4. 选择任意版本的BACRouter固件,点击“upgrade”,页面将显示:

5. 等待1分钟之后再次刷新页面,WebUI就又回来了,请从备份中恢复原有的配置。