环境
- 位置一: Openwrt 动态公网, 已配置DDNS
- 位置二: ROS 移动大内网, 有IPv6
- 位置三: Windows笔记本
- wg虚拟网络: 10.12.0.0/24
位置一配置流程
-
安装wireguard包, 重启Openwrt
-
新建接口(wg0)
- 协议选择WireGuard VPN
- 点击生成新的密钥对, 并且记下公钥
- 端口填写一个高位端口
- IP这里设置了.1
-
防火墙直接加入到lan区域即可
-
保存并应用
位置二配置
-
Winbox首页点击WireGuard, 添加一个接口
- 端口也是随意填写一个, 反正正常没有设备会连接到这个节点, 也连不上
- 公私钥如果空着点击Apply后会自动生成, 也可以事先生成好
-
Peer配置
- 公钥添加上面位置一的公钥
- 端口添加位置一的端口
- Allowed Address填写位置一的Wireguard的虚拟IP
-
IP-Addresses 配置
-
IP->Firewall->NAT 增加一条伪装
位置三配置
-
安装WireGuard安装包
-
添加空隧道, 填入下面的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14
[Interface] PrivateKey = 本机的私钥 Address = 10.12.0.3/24 [Peer] PublicKey = 位置一的公钥 AllowedIPs = 10.12.0.1/32, 10.11.0.0/24 Endpoint = ddns域名:位置一的端口 PersistentKeepalive = 30 [Peer] PublicKey = 位置二的公钥 AllowedIPs = 10.12.0.2/32, 10.11.0.0/24 PersistentKeepalive = 30
-
启动即可
检查连接
由于Openwrt上可以查看各个节点的连接情况, 状态-WireGuard
包装左边两个小电脑都亮起即表示连接成功
AllowIPs说明
网上一个说明很不错, 以第一人称视角来看.
例如, 我现在是10.12.0.3/32
这台windows机器, 对我来说, 10.12.0.3/32
这台可能会以什么IP访问我.
10.12.0.3/32
它自己自身的IP10.11.0.0/24
它所在局域网的网段
而由于我的网络环境下只有一台有公网的机器, 那么10.12.0.3和10.12.0.2之间如果要通讯, 有两种方式
.3
通过IPv6连接到.2
.3
通过.1
中转到.2
~~方式一由于ROS上不好搞IPv6的DDNS, 每次连接会比较麻烦. ~~
采用方式二, 需要在.3
的对端配置中给 .1
这个Peer的AllowIP添加.2
的局域网IP段. 同时.1
的对端配置中也要把.2
的局域网网段配置进去(即使.1
不需要访问.2
的局域网)
ROS配置IPv6 DDNS
让ROS上的wireguard可以被连接, 这样就可以少一层中转
ddns中转服务
参考 https://github.com/lsprain/Aliddns-Ros, 进行轻微修改, 加入AAAA记录的支持
最终是这样的请求地址
|
|
ROS脚本
这里脚本也经过修改, 原版是从pppoe接口中获取地址, 原版只能获取ipv4地址, ipv6需要从ipv6下的Address里获取
|
|
|
|
先放到System
->Scripts
中进行测试, 如果能正确更新dns记录, 再放到System
->Scheduler
中. 时间间隔则需要进行观察, 看看pppoe多久会自动重新获取地址.