一台主机连接到两个 wireguard,怎么让两个 wireguard 互相通信

2019-08-31 16:48:59 +08:00
 GetWoke

研究了好久,没有搞定,各种 iptables,ip route/ip rule 都试过,还是没有正确转发相关数据 需求如下: 我希望的隧道原理是:A<--->B<--->C。B (内网)主动连接到两个 wireguard 隧道,B 有两个隧道网络 B1 连接到 A,B2 连接到 C。怎么才能让 A 发给 B1 的数据通过 B2 转发到 C,B 是一台 Centos7,同时连接的 A 跟 C。A 跟 B1 能通信,C 跟 B2 能通信。 A ip:192.168.100.1 B1 ip:192.168.100.254 B2 ip:192.168.200.254 C ip:192.168.200.1 如果才能把来之 192.168.100.0/24 的数据通过 192.168.200.254(B2)转发给 192.168.200.1,是 192.168.100.0/24 网段的所有数据都能转发出去,不是单个端口或者单个 IP。 另外还有一点疑问请教各位老哥。iptables 转发数据跟路由有什么关系吗,比如:我写了一条路由所有来自 B1 网卡 192.168.100.0/24 网段的包都从 B2 网卡的 192.168.200.254 出去,那中间我还需要 iptables 做 NAT 转发吗,我的意思是 3 层路由之间是直接能转发不同网段的数据包。还是说必须先通过 iptables 把所有来自 192.168.100.0/24 的包里面的原地址全部替换成转发出口的原地址呢,也就是替换成 192.168.200.254 之后再从 B2 网卡出去?

12619 次点击
所在节点    Linux
19 条回复
xduanx
2019-08-31 16:56:07 +08:00
1,A 和 C 上写到对方的路由,B 开启转发,就可以实现你的目标
2,iptables 和路由没关系,不用做 nat
3,有什么问题,我懂,随便问
GetWoke
2019-08-31 17:14:41 +08:00
@xduanx 多谢老哥的耐心回答,我现在去试试
HarveyLiu
2019-08-31 18:09:29 +08:00
走 udp 的协议,你要确保所有转发的服务器都没 qos
linmq
2019-08-31 18:24:16 +08:00
看起来你要把三个地方组成一个大局域网。买三个路由器组成 site to site 就行了 https://docs.gl-inet.com/en/3/app/cloud/
Unknowncheats
2019-08-31 18:29:58 +08:00
參考 full cone nat
GetWoke
2019-08-31 18:38:25 +08:00
@HarveyLiu 肯定没有 QOS,现在我不是纠结有没有 QOS 的问题,我只是想让两个 wireguard 互相通信就行了,只要能通就可以
GetWoke
2019-08-31 18:40:09 +08:00
@linmq 没有路由器,也无法使用路由器,只能用 wireguard 或者 Open***之前使用 Open***在二层转发能通,但是效率太低。
GetWoke
2019-08-31 18:41:20 +08:00
@Unknowncheats 跟 NAT 类型没关系把,我只是要转发数据而已,只要在网络层打通了 就是局域网了
Unknowncheats
2019-08-31 18:49:55 +08:00
@GetWoke NAT 通了,vpn 內機器能和外網互相訪問,不需要端口轉發
gefranks
2019-08-31 18:57:59 +08:00
假设你 A->B1, C->B2 都是能 ping 通了.
B 上开 IP 转发,检查各个机器上的回程路由.
不需要 iptables 参与路由 ,但是需要 iptables 放行这些数据包, FORWORD 链上有时候要显式允许
wireguard 这种类似于 NBMA 网络的,请注意子网掩码的范围,不是 /24 一把梭就行的
在网络的出口上做 IP masquerade NAT 就行
AnyISalIn
2019-08-31 19:14:11 +08:00
artoostark
2019-08-31 22:36:08 +08:00
wireguard 太弱 ji 了,从网上找的十几个免费配置,试了一次就挂了。
slanternsw
2019-09-01 01:49:00 +08:00
@artoostark out of topic.
lifengdp
2019-09-01 02:35:44 +08:00
@xduanx @AnyISalIn @gefranks 感谢诸位朋友!

不是楼主,但在用 wireguard 异地组网时,碰到和楼主一样的问题 ,调试了一天,原来是 gateway 没有开 ip 转发的原因。

另外楼主可以考虑用 wireguard 隧道组网时,使用 udp2raw 伪装下,wireguard 使用 udp 端口,在公网上跑有很大可能碰上运营商 qos 或阻断。

用过 zerotier、tinc、n2n 这类基于 udp 打洞直连的 vpn,虽然打洞成功率都不错,但实际用下来体验并不好,主要就是因为运营商对 udp 进行 qos 或者阻断。
hawhaw
2019-10-14 19:49:04 +08:00
多看官方文档,wireguard 跟 iptables 一毛钱关系都没有
hawhaw
2019-10-14 20:07:27 +08:00
你这情况,如果 ip 是真的的话,完全可以用一条 wireguard 隧道直接联通 B 和 C
yujiaxin
2020-04-27 08:42:51 +08:00
有没有办法让两个 nat 后面的 peer A 、B,借助一个有公网 ip 的 peer C 实现直连,而不用通过 C 转发?
Huelse
2021-01-22 20:02:39 +08:00
你好,我想用 A (笔记本)通过 C (公网 server )访问 B (家里的 unraid )的服务 peers 要分别怎么设置呀?
/t/747297
尝试了很多次,都只能在 C 访问 B 的服务,A 只能 ping 通 B 但访问不到资源,如: http://B:80
yangchuansheng33
2021-03-02 21:00:46 +08:00
嫌资料少?你怕是没看过这里: https://fuckcloudnative.io/tags/wireguard/

现在还少吗?😬

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

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

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

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

© 2021 V2EX