关于 WireGuard 异地组网的问题

5 天前
 TashinV
确认了网络设备之后开始研究异地组网的问题。
目前情况是:
有 3 处地方需要组网,暂且用 A 、B 、C 3 个字母替代吧。
A 地是家里,电信 1000MB 宽带,有 ipv4 公网,路由器支持 WireGuard ;
B 地是家里,电信 300MB 宽带,暂时没有公网,路由器支持 WireGuard ;
C 地是办公室,电信宽带,带宽不明,确认无公网,计划用一台 NUC 装 WireGuard 。

目前是想把 A 、B 、C 3 地组成局域网,当人在外地出差的时候可以方便连回任意一个地点。除此之外,希望 3 地能够实现互通:
1. 移动设备与 2 个家庭局域网互联
2. 移动设备与公司局域网互联
3. 2 个家庭局域网都与公司局域网互联
4. 公司局域网与 2 个家庭局域网互联
5. 2 个家庭之间能够局域网互联

想请问大佬们:
1. 这个需求 WireGuard 可以做到吗?
2. 如果 WireGuard 可以做到的话,是否可以不需要外界的有公网的主机?因为我看很多教程都是通过阿里等提供公网的主机来中继的,这样速度会有瓶颈,所以不想要这种方式。


感谢各位指点迷津的大佬!
1292 次点击
所在节点    宽带症候群
26 条回复
Drool
5 天前
我是直接用 zeroTier 打通成都家里和江苏家里,成都联通有公网,江苏电信 NAT1 ,打洞能成功的话应该不需要中转了
IvanLi127
5 天前
没固定公网 ip 的话,想做到比较麻烦。正常来说通过 A 的公网 ip 做中继就能实现,就是变化时比较麻烦。

不想加公网服务器还是 zerotier 或者 tailscale 吧,至少方便点
linzyjx
5 天前
看看 BC 之间能不能打洞吧。不行可能要用 A 当中转
linzyjx
5 天前
@IvanLi127 动态 IP 倒是可以用域名+DDNS ,不过可能要弄个监控重启的机制啥的
bobryjosin
5 天前
A 作为中心节点就行了,BC 全部连到 A ,三台设备起 ospf 三层就通,移动设备连到 A 就行了,缺点就是带宽受制于 A 。
aichunya
5 天前
没有问题,我现在就是你这种网络环境,你把有公网的那个当做中继就行了
zbinlin
5 天前
既然 A 有 1000M ,可以拿 A 作为 Server 节点,其他地直接连 A
bjfane
5 天前
楼上说的都没问题,但是都是大佬说的,太简要了,
实施步骤 1 、移动流量(不在 abc 局域网),能访问 A 以及 A 背后的所有设备,目的看看怎么配置才能访问 A 的局域网的其他设备。
步骤 2 、检测 B C 能不能直接通,这个对体验非常重要,就是有没有 A 中转,
步骤 3 、A 和 B 双边设备都能访问对面局域网设备,且移动流量能访问 A 和 B 任意设备

有了以上 wg 的配置基础,C 怎么加入就好办了。

核心就是 allowips 怎么填、peer 地址是什么,和 wg 上的一层 NAT
bjfane
5 天前
另外你的 A 的机器至少完全可以当云厂商的功能,肯定不需要公网云, 轻度同步从 A 过一下 也不是不行,现在一般都是 30 ~ 50M 的上行了,完全没问题。
Int100
5 天前
可以做到,wireguard 单纯起 p2p 隧道,allowip 全部放行,路由交给动态路由协议来生成,rip ospf 这些,三层组网。
orionl
5 天前
A 用 WireGuard 做 server ,配置成站点到站点。其他的做 client ,导出 A 的客户端配置上传即可。
Ipsum
5 天前
组成网状结构,A 当中心节点。
git00ll
5 天前
用 zeroTier 打洞试试,A 有公网无论用啥工具组网肯定没问题,试试说不定 BC 能直接打洞这样就不用麻烦 A 做中转了
SenLief
4 天前
楼上有说用 zerotier 或者 tailscale 打洞,这两种打洞方式都是需要 NAT1 的,要不然一样需要走中继,最容易的还是 ipv6 ,wg 也用 ipv6
dalaoshu25
4 天前
超简单。

A 就做中心节点,配置好 DDNS 即可。
B 和 C 都是 peer ,连接到 A 。当然这样做 BC 之间访问要经过 A ,无所谓了。

需要确认的是,B 的路由器是什么,有没有运行脚本检测 wg 链接是否接通的能力,否则 A 一旦断线换新 IP 后 B 和 C 都会断线,需要重新建立 wg 链接。
IvanLi127
4 天前
回附言,即使是用 DDNS ,变化后至少得主动断开重连。B 和 C 得自动话处理这个事,不然变了你就失去从 A 连 BC 的机会了。
dalaoshu25
4 天前
A 设置好 DDNS ,具体怎样看你的路由器是什么了,把自己的公网 IPv4 和 v6 都设给 ddns 的动态域名,比如我用 dynv6

B 和 C 的设置文件里,A 的 Endpoint 写动态域名和端口。

B 和 C 如果是个服务器,可以写脚本定时去 ping 节点 A 的 wg 地址,如果 Ping 不通就重新建立 wg 连接。因为 wg 仅仅在建立连接的时候查询域名,之后在内核里就只有 IP 地址了。

有现成的例子可供参考 /usr/share/doc/wireguard-tools/examples/reresolve-dns
TashinV
4 天前
@linzyjx
请问下这个监控重启机制该怎么弄呢?有没有教程?

@aichunya
请问下您在公网 IP 变化的问题是怎么解决的呢?

@bjfane
请问下在公网 IP 变化的问题是怎么解决的呢?
TashinV
4 天前
@IvanLi127
#16 A 路由准备用 UDM SE ,B 路由目前是 AC68U ,必要的话 B 路由可以更换。
目前这个情况 B 、C 需要能自动检测并重启连接,请问这个该怎么做到呢?

@dalaoshu25
#29 B 是路由,AC68U ,必要的话可以更换。C 地就是一台连接公司网络的 Windows 电脑。这样的情况该怎么解决公网 IP 变化的问题呢?
bjfane
4 天前
DDNS 啊, 我看你的方案里不是有 《域名+DDNS 》这个么,你先找个域名和 ddns 装起来,配置好,然后重启 A 的拨号节点等更新,感受一下就知道了 :),这块是非常简单的, 比如 ddns-go ,搜这个项目

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1079282

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX