V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
GetWoke
V2EX  ›  Linux

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

  •  
  •   GetWoke · 2019-08-31 16:48:59 +08:00 · 12562 次点击
    这是一个创建于 1916 天前的主题,其中的信息可能已经有所发展或是发生改变。

    研究了好久,没有搞定,各种 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 网卡出去?

    第 1 条附言  ·  2019-11-05 16:10:15 +08:00
    终于解决了,卧槽,头疼了半个月,研究了很久 osi 模型,理解了三层四层的相关知识后,终于搞定了,确实如大佬们所说的一样,其实中间根本不需要 nat,写好目的路由就行了,当然 WireGuard 得再两边的 perr 各自写上对方的路由,也就是 AllowedIPs 选项中必须要写目的地址,回程路由一样在另一边的 AllowedIPs 写上源地址(数据包的原地址,不一定是 WireGuard 隧道的地址段),不然不会路由。WireGuard 的官方资料还是太少了,东西我觉得还是不错,加密 速度 资源占用之类的优点,确定就是资料少,官方更新也慢,目前国内用的不错,轻松跑满 200M 外网带宽。
    19 条回复    2021-03-02 21:00:46 +08:00
    xduanx
        1
    xduanx  
       2019-08-31 16:56:07 +08:00 via iPhone   ❤️ 2
    1,A 和 C 上写到对方的路由,B 开启转发,就可以实现你的目标
    2,iptables 和路由没关系,不用做 nat
    3,有什么问题,我懂,随便问
    GetWoke
        2
    GetWoke  
    OP
       2019-08-31 17:14:41 +08:00
    @xduanx 多谢老哥的耐心回答,我现在去试试
    HarveyLiu
        3
    HarveyLiu  
       2019-08-31 18:09:29 +08:00 via Android
    走 udp 的协议,你要确保所有转发的服务器都没 qos
    linmq
        4
    linmq  
       2019-08-31 18:24:16 +08:00 via iPhone
    看起来你要把三个地方组成一个大局域网。买三个路由器组成 site to site 就行了 https://docs.gl-inet.com/en/3/app/cloud/
    Unknowncheats
        5
    Unknowncheats  
       2019-08-31 18:29:58 +08:00 via Android
    參考 full cone nat
    GetWoke
        6
    GetWoke  
    OP
       2019-08-31 18:38:25 +08:00
    @HarveyLiu 肯定没有 QOS,现在我不是纠结有没有 QOS 的问题,我只是想让两个 wireguard 互相通信就行了,只要能通就可以
    GetWoke
        7
    GetWoke  
    OP
       2019-08-31 18:40:09 +08:00
    @linmq 没有路由器,也无法使用路由器,只能用 wireguard 或者 Open***之前使用 Open***在二层转发能通,但是效率太低。
    GetWoke
        8
    GetWoke  
    OP
       2019-08-31 18:41:20 +08:00
    @Unknowncheats 跟 NAT 类型没关系把,我只是要转发数据而已,只要在网络层打通了 就是局域网了
    Unknowncheats
        9
    Unknowncheats  
       2019-08-31 18:49:55 +08:00 via Android
    @GetWoke NAT 通了,vpn 內機器能和外網互相訪問,不需要端口轉發
    gefranks
        10
    gefranks  
       2019-08-31 18:57:59 +08:00   ❤️ 1
    假设你 A->B1, C->B2 都是能 ping 通了.
    B 上开 IP 转发,检查各个机器上的回程路由.
    不需要 iptables 参与路由 ,但是需要 iptables 放行这些数据包, FORWORD 链上有时候要显式允许
    wireguard 这种类似于 NBMA 网络的,请注意子网掩码的范围,不是 /24 一把梭就行的
    在网络的出口上做 IP masquerade NAT 就行
    AnyISalIn
        11
    AnyISalIn  
       2019-08-31 19:14:11 +08:00 via iPhone   ❤️ 1
    artoostark
        12
    artoostark  
       2019-08-31 22:36:08 +08:00
    wireguard 太弱 ji 了,从网上找的十几个免费配置,试了一次就挂了。
    slanternsw
        13
    slanternsw  
       2019-09-01 01:49:00 +08:00
    @artoostark out of topic.
    lifengdp
        14
    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
        15
    hawhaw  
       2019-10-14 19:49:04 +08:00 via Android
    多看官方文档,wireguard 跟 iptables 一毛钱关系都没有
    hawhaw
        16
    hawhaw  
       2019-10-14 20:07:27 +08:00 via Android
    你这情况,如果 ip 是真的的话,完全可以用一条 wireguard 隧道直接联通 B 和 C
    yujiaxin
        17
    yujiaxin  
       2020-04-27 08:42:51 +08:00
    有没有办法让两个 nat 后面的 peer A 、B,借助一个有公网 ip 的 peer C 实现直连,而不用通过 C 转发?
    Huelse
        18
    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
        19
    yangchuansheng33  
       2021-03-02 21:00:46 +08:00
    嫌资料少?你怕是没看过这里: https://fuckcloudnative.io/tags/wireguard/

    现在还少吗?😬
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1336 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 17:51 · PVG 01:51 · LAX 09:51 · JFK 12:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.