LAN 通过 wireguard 吗?

LAN 通过 wireguard 吗?

据我所知,WireGuard 是点对点的,没有服务器/客户端架构。但是,我仍然希望使用集中式服务器来绕过防火墙并处理非静态 IP。

设置如下:

  • Peer 1:具有静态 IP 的服务器,所有其他 Peer 都将连接到该服务器;
  • 对等体 2:一台 Windows 机器,我想通过 WireGuard 通道为其提供一些 SMB 和远程桌面服务;位于 NAT 路由器后面并且没有静态 IP。
  • 对等点 3:需要通过对等点 1 连接到对等点 2 的其他机器

我设法达到了这个设置:

对等体 1(Ubuntu 18.04)

隧道IP:10.10.123.1

$ wg
interface: wg0
  public key: OuQHfIZE7/28I4Z/cY3ixpK0VIjfZGkE0XB1OtjTqgs=
  private key: (hidden)
  listening port: 51820
  fwmark: 0xca6c

peer: cJx868ZvsArhzYVjtuywFrD0nHv6vjshnHcNszDsyyQ=
  endpoint: <censored>:65229
  allowed ips: 10.10.123.69/32
  latest handshake: 9 seconds ago
  transfer: 44.45 KiB received, 24.71 KiB sent

peer: m2ivoopxHRunmwtweArcixWEPmHgjiL2vqCyU9zFiBQ=
  endpoint: <censored>:51820
  allowed ips: 10.10.123.99/32
  latest handshake: 25 minutes, 14 seconds ago
  transfer: 2.47 KiB received, 3.56 KiB sent

对等体 2 (Debian 10)

隧道IP:10.10.123.99

$ wg
interface: wg0
  public key: m2ivoopxHRunmwtweArcixWEPmHgjiL2vqCyU9zFiBQ=
  private key: (hidden)
  listening port: 51820

peer: OuQHfIZE7/28I4Z/cY3ixpK0VIjfZGkE0XB1OtjTqgs=
  endpoint: <censored>:51820
  allowed ips: 10.10.123.0/24
  latest handshake: 30 minutes, 19 seconds ago
  transfer: 604 B received, 692 B sent

Peer 3(Windows 7)

隧道IP:10.10.123.69

在此处输入图片描述

  • 对等体 1 可以 ping 通10.10.123.99(对等体 2) 和10.10.123.69(对等体 3)
  • 对等体 2 可以 ping 通10.10.123.1(对等体 1),但不能ping 通10.10.123.69(对等体 3)
  • 对等体 3 可以 ping 通10.10.123.1(对等体 1),但不能ping 通10.10.123.99(对等体 2)

航线

那么很有可能是路线偏离了?

同伴2我正在使用它来根据配置文件中的指令wg-quick设置路由:AllowedIps

cat wg0.conf 
[Interface]
Address = 10.10.123.99/24
ListenPort = 51820
PrivateKey = <censored>
Table = auto

[Peer]
PublicKey = OuQHfIZE7/28I4Z/cY3ixpK0VIjfZGkE0XB1OtjTqgs=
AllowedIPs = 10.10.123.0/24
Endpoint = <censored>:51820

ip route输出:

10.10.123.0/24 dev wg0 proto kernel scope link src 10.10.123.99

对等体 1我也在使用wg-quick

$ cat wg0.conf 
[Interface]
Address = 10.10.123.1/24
SaveConfig = true
ListenPort = 51820
FwMark = 0xca6c
PrivateKey = <censored>

[Peer]
PublicKey = m2ivoopxHRunmwtweArcixWEPmHgjiL2vqCyU9zFiBQ=
AllowedIPs = 10.10.123.99/32
Endpoint = <censored>:51820

[Peer]
PublicKey = cJx868ZvsArhzYVjtuywFrD0nHv6vjshnHcNszDsyyQ=
AllowedIPs = 10.10.123.69/32
Endpoint = <censored>:56431

ip route输出:

10.10.123.0/24 dev wg0 proto 内核范围链接 src 10.10.123.1

同伴 3(windows) 我使用的是官方软件包中的 GUI。这个似乎没有在网络接口上设置“网关”。我在设置中找不到允许这样做的键。所以我手动添加了网关10.10.123.1

问题:

是否有可能创建一种 wireguard LAN?如果可以,我的配置中缺少什么?我正在寻找一种或多或少动态(路由)的配置,因为以后可能会添加更多对等点。

答案1

如果我正确理解了这个问题,您希望所有的 wireguard 对等点能够通过中心节点相互交谈。

此外,您可能希望 wireguard 对等体能够通过物理 LAN 接口进行通信,甚至可能通过 WAN 接口进行互联网服务通信。

您唯一缺少的就是允许内核中的数据包转发。通过这样做,您还可以允许 wireguard 接口转发到其他子网,例如 Ubuntu Peer #1 上物理连接的 LAN。

在 Ubuntu Peer #1 上:

步骤1:确保内核允许数据包转发。

编辑/etc/sysctl.conf并设置net.ipv4.ip_forward = 1IPv4,也可选择net.ipv6.ip_forward = 1设置 IPv6。

使用以下命令重新加载配置sudo sysctl -p

现在测试连接。如果你没有配置防火墙,它应该已经可以正常工作了。

第 2 步(可选):确保防火墙允许转发。

如果您正在使用 IPTABLE 并且已将FORWARD DROP其设置为默认策略,则可能需要一些如下规则:

允许 wg0 上的数据包被 PEER #1 接收、从 PEER #1 发送,并且从 PEER #1 转发到任何地方:

-A INPUT -i wg0 -j ACCEPT
-A OUTPUT -o wg0 -j ACCEPT
-A FORWARD -i wg0 -j ACCEPT

允许从 LAN 接口传入的数据包enp2s0被发送、接收和转发到任何地方:

-A INPUT -i enp2s0 -j ACCEPT
-A OUTPUT -o enp2s0 -j ACCEPT
-A FORWARD -i enp2s0 -j ACCEPT

奖励回合:

如果您想将 Ubuntu 计算机用作全功能面向互联网的路由器,请启用 WAN 接口规则。允许仅限已建立的连接从 WAN 接口enp1s0被 PEER #1 接受或转发到其他接口:

-A INPUT -i enp1s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i enp1s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o enp1s0 -j ACCEPT

# Allow ICMP for correct operation
-A INPUT -i enp1s0 -p icmp -j ACCEPT

如果您打算将其用作面向互联网的路由器,您还应该锁定默认策略,然后根据需要明确开放其他规则:

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP

如果您正在使用该iptables-persistant包,可以将其添加到/etc/iptables/rules.v4*filter部分下。

相关内容