据我所知,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 = 1
IPv4,也可选择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
部分下。