通过wireguard 隧道进行流量转发的Linux 路由器

通过wireguard 隧道进行流量转发的Linux 路由器

我有两个位置运行 ArchLinux 服务器。

  1. 远程位置由本地 ISP 的路由器进行 NAT。那里的 ISP 不提供公共 IP 地址,因此路由器的 IP 地址为 10.0/16,并且无法从 ISP 获取公共 IP 地址。
  2. 主位置,ArchLinux 服务器再次运行,但在 ISP 路由器后面进行 NAT。但在这种情况下,ISP 提供了公共 ipv4 地址。

我在两台服务器上运行wireguard。使用家庭位置上的公共 IP 地址和路由器的端口转发功能,远程 ArchLinux 服务器可以建立到家庭位置的wireguard 对等连接。

我已经使用 SSH 命令从家庭位置到远程位置设置了 SOCKS5 代理。使用此 SOCKS5 代理,我的家庭网络中的浏览器可以路由流量以从远程位置访问网站和服务。将其视为地理解锁服务用例。

现在我想更进一步,想让我的家庭 ArchLinux 服务器成为 Linux 路由器,以便其他设备也可以通过远程位置转发流量。

家庭服务器只有 1 个 eth 端口。有无线网卡,但未连接。我可以创建一个用于路由的虚拟接口,不确定具体如何做,但可能可以阅读文档并执行此操作。我最大的问题是如何从中创建一个路由器,以便我可以在家庭服务器上接收流量并通过已建立的wireguard对等隧道转发到远程服务器。我希望其他设备也能够访问远程服务器,而不仅仅是具有 SOCKS5 代理支持功能的浏览器。我有一个旧路由器,可以用来设置 wifi。我希望这个路由器通过家庭服务器-->wireguard隧道-->远程服务器路由流量。

通过SOCKS5代理远程访问网站

答案1

如果您已经在家庭 WireGuard 服务器和远程 WireGuard 服务器之间设置了 WireGuard 连接以通过它发送所有家庭 WireGuard 服务器的 Internet 流量,则远程服务器上的 WireGuard 配置可能如下所示:

[Interface]
PrivateKey = abc123...
Address = 192.168.95.4/24

# packet forwarding
PreUp = sysctl -w net.ipv4.conf.all.forwarding=1
# packet masquerading
PreUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = def456...
AllowedIPs = 192.168.95.1/32
Endpoint = 203.0.113.2:51820
PersistentKeepalive = 25

您的家庭 WireGuard 服务器上的 WireGuard 配置可能如下所示:

[Interface]
PrivateKey = ghi890...
Address = 192.168.95.1/24
ListenPort = 51820

[Peer]
PublicKey = jkl123...
AllowedIPs = 0.0.0.0/0

要使您的家庭 WireGuard 服务器能够通过此 WireGuard 连接转发来自其 LAN 的流量,请执行以下操作:

1. 在您的家庭 WireGuard 服务器上启用数据包转发

在您的家庭 WireGuard 服务器上运行此命令以启用 IPv4 数据包转发:

sudo sysctl -w net.ipv4.conf.all.forwarding=1
2. 伪装从您的家庭 WireGuard 服务器转发的流量

如果您在家庭 WireGuard 服务器上使用 iptables,并且其 WireGuard 接口为wg0,请运行此命令来伪装转发到其 WireGuard 接口的数据包:

sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
3.调整家庭WireGuard服务器上的防火墙

如果您在家庭 WireGuard 服务器上使用 iptables,并且其 LAN 接口为eth0且其 WireGuard 接口为wg0,请运行此命令以允许连接从 LAN 转发到 WireGuard 接口(并允许现有连接通过其他方式返回) :

sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT

如果尚未在 WireGuard 服务器上设置防火墙来阻止任何流量,则不需要此操作。使用以下命令检查现有的 iptables 规则集:

sudo iptables-save

或者 nftables 的命令:

sudo nft list ruleset
4. 路由来自家庭 LAN 的互联网流量

调整您的家庭路由器或家庭 LAN 上的各个设备,以使用 WireGuard 服务器的 LAN IP 将 Internet 流量路由到您的家庭 WireGuard 服务器。

eth0在 Linux 设备上,如果设备的 LAN 接口为,并且您的家庭 WireGuard 服务器的 LAN 地址为192.168.1.123,则执行此操作的命令如下:

sudo ip route change default via 192.168.1.123 dev eth0

请注意,此命令和所有上述命令仅对系统配置进行临时更改 - 它们不会在系统重新启动后继续存在(如果设备正在使用 DHCP,则其 DHCP 客户端在更新其 DHCP 租约时可能会更改其默认路由) )。如果您想让它们永久存在,请将它们添加到系统启动后运行的脚本中。

相关内容