AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1088689
Accepted
Coxer
Coxer
Asked: 2022-01-01 10:40:16 +0800 CST2022-01-01 10:40:16 +0800 CST 2022-01-01 10:40:16 +0800 CST

Wireguard 使用一个客户端作为另一个客户端的网关

  • 772

我有一个 Wireguard VPN 设置,基本上如下所示:

P1 ---- S ---- P2 --- Internet

IP地址: P1 = 10.200.1.5 S = 10.200.1.1 P2 = 10.200.1.3

我通过allowedIps = 0.0.0.0/0在 P1 的客户端配置中指定将 P1 的所有流量重定向到 S。

现在我希望 S 将流量路由到 P2。我在 S 上尝试了以下操作:

 ip rule add from 10.200.1.5 lookup 200
 ip route add default via 10.200.1.3 dev wg0 table 200
 sysctl -w net.ipv4.ip_forward=1

但是,当我在 P2 上运行 tcpdump 时,我看不到任何流量进入。P1 也没有遇到任何互联网连接。

编辑:通过 S 测试自定义路由表

ip route get 8.8.8.8 from 10.200.1.5 iif wg0

给出以下响应

8.8.8.8 from 10.200.1.5 via 10.200.1.3 dev wg0 table 200
    cache iif wg0

然而,这似乎很好

tcpdump -nn -i wg0

显示S无法访问,如下所示

09:58:22.207251 IP 10.200.1.5.9134 > 8.8.8.8.53: 36555+ A? play.googleapis.com. (37)
09:58:22.207270 IP 10.200.1.1 > 10.200.1.5: ICMP host 8.8.8.8 unreachable, length 73
routing wireguard policy-routing
  • 1 1 个回答
  • 1357 Views

1 个回答

  • Voted
  1. Best Answer
    A.B
    2022-01-25T15:40:24+08:002022-01-25T15:40:24+08:00

    WireGuard 是第 3 层接口,因此这样的声明via 10.200.1.3无效,因为它将用于链路层协议(通常是 ARP)来解析此处不存在的第 2 层地址。

    所以

    ip route add default via 10.200.1.3 dev wg0 table 200
    

    可以重写:

    ip route add default dev wg0 table 200
    

    这有助于记住这部分不是选择数据包到 P1 或 P2 的部分:WireGuard 也有自己的内部路由:cryptokey -routing,这是通过AllowedIPs在每个对等点的配置中正确设置来完成的。有一个重要限制:与标准路由相反,AllowedIPs不支持任何重叠地址。如果尝试这样做(例如在服务器 S 上AllowedIPs = 0.0.0.0/0为 Peer P2 设置),这将自动擦除(该)其他对等点上的冲突地址(例如AllowedIPs = 10.200.1.5从 Peer P1 擦除,因为0.0.0.0/0与其他任何东西重叠)并且连接将受到影响( S 不会将任何内容加密路由到 P1:不再连接)。

    有两种方法可以解决这个问题:

    • 使用两个不同的 WireGuard 接口

      之前的限制是针对每个 WireGuard 接口的。使用第二个接口可以避免这种冲突,但会使路由更加复杂。现在在路由表200和/或主表中可能需要多个条目:一个用于左侧接口,一个(默认)用于右侧接口。

    • 对冲突的范围进行一组减法

      实际上可能有工具能够计算集合 0.0.0.0/0 和集合 10.200.1.5 之间的差异,但我不知道它们。还有一个名为netmask(主页:https ://github.com/tlby/netmask )的方便工具,它有助于将范围转换为最小的网络掩码集:

      $ netmask 0.0.0.0:9.255.255.255 10.200.1.3 11.0.0.0:255.255.255.255
              0.0.0.0/5
              8.0.0.0/7
           10.200.1.3/32
             11.0.0.0/8
             12.0.0.0/6
             16.0.0.0/4
             32.0.0.0/3
             64.0.0.0/2
            128.0.0.0/1
      

      这些是应该在服务器 S 上用于对等 P2 的值(用逗号分隔),AllowedIPs因此加密密钥路由将在那里路由任何东西,除了 10.0.0.0/8,其中只有 10.200.1.3 将在 P2 端定义,在 P1 一侧保留已定义的 10.200.1.5:不再有重叠。P1 发送到 Internet 的数据包现在应该继续到 P2 以进行进一步路由。

    • 1

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • 将路由永久添加到 Solaris 10

  • Quagga 套件中的 ./configure --disable-zebra 代表什么?

  • 使用特定接口进行出站连接(Ubuntu 9.04)

  • Linux TC/策略路由工具

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve