我在我的本地网络中运行一个 Wireguard“服务器”,我通过我的静态公共 IP 远程访问它。我希望能够将 Wireguard 远程对等点的访问限制为我的局域网中的服务/机器,我在其中托管其他服务器。
示例:安装了 Wireguard 的服务器 1 (192.168.1.23 | 10.0.0.1) + Nextcloud + Jellyfin 在同一台机器上 服务器 2 (192.168.1.62) 和 Photoprism
远程对等体 1 (10.0.0.2 | 动态 ip) 远程对等体 2 (10.0.0.3 | 动态 ip)
我想要:
1- 允许 peer1 (10.0.0.2) 访问服务器 1 Nextcloud + Jellyfin 并访问服务器 2 到 Photoprism。
2- 允许 Peer2 (10.0.0.3) 仅访问服务器 1 Nextcloud 但不允许访问 Jellyfin 并阻止访问服务器 2
现在我可以从所有 Peers 访问我局域网中的所有机器。
iptables 规则:
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s7 -j MASQUERADE; iptables -t nat -A POSTROUTING -o wg0
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s7 -j MASQUERADE; iptables -t nat -D POSTROUTING -o wg0
我遵循了Justin Ludwig的本教程,因为站点到点拓扑与我的非常相似。所以我尝试用这些规则复制 Iptables 规则:
# masquerading
PreUp = iptables -t mangle -A PREROUTING -i wg0 -j MARK --set-mark 0x200
PreUp = iptables -t nat -A POSTROUTING ! -o wg0 -m mark --mark 0x200 -j MASQUERADE
PostDown = iptables -t mangle -D PREROUTING -i wg0 -j MARK --set-mark 0x200
PostDown = iptables -t nat -D POSTROUTING ! -o wg0 -m mark --mark 0x200 -j MASQUERADE
# wireguard ingress
PreUp = iptables -I INPUT -p udp --dport 2332 -j ACCEPT
PostDown = iptables -D INPUT -p udp --dport 2332 -j ACCEPT
# site firewall
PreUp = iptables -N wg0-filter
PreUp = iptables -N to-photoprism
PreUp = iptables -N to-jellyfin
PreUp = iptables -N to-nextcloud
PreUp = iptables -I INPUT -i wg0 -j wg0-filter
PreUp = iptables -I FORWARD -i wg0 -j wg0-filter
PreUp = iptables -I FORWARD -o wg0 -j wg0-filter
PreUp = iptables -I OUTPUT -o wg0 -j wg0-filter
PreUp = iptables -A wg0-filter -m state --state ESTABLISHED,RELATED -j ACCEPT
PreUp = iptables -A wg0-filter -d 192.168.1.63 -p tcp --dport 2342 -j to-photoprism
PreUp = iptables -A wg0-filter -d 192.168.1.23 -p tcp --dport 8096 -j to-jellyfin
PreUp = iptables -A wg0-filter -d 192.168.1.23 -p tcp --dport 80 -j to-nextcloud
PreUp = iptables -A wg0-filter -j REJECT
PreUp = iptables -A to-photoprism -s 10.0.0.2 -j ACCEPT
PreUp = iptables -A to-jellyfin -s 10.0.0.2 -j ACCEPT
PreUp = iptables -A to-jellyfin -s 10.0.0.3 -j ACCEPT
PreUp = iptables -A to-nextcloud -s 10.0.0.2 -j ACCEPT
PreUp = iptables -A to-nextcloud -s 10.0.0.3 -j ACCEPT
PostDown = iptables -D INPUT -i wg0 -j wg0-filter
PostDown = iptables -D FORWARD -i wg0 -j wg0-filter
PostDown = iptables -D FORWARD -o wg0 -j wg0-filter
PostDown = iptables -D OUTPUT -o wg0 -j wg0-filter
PostDown = iptables -F to-photoprism
PostDown = iptables -F to-jellyfin
PostDown = iptables -F to-nextcloud
PostDown = iptables -X to-photoprism
PostDown = iptables -X to-jellyfin
PostDown = iptables -X to-nextcloud
这不起作用,Peer 1 和 Peer 2 可以访问服务器 1,这两个服务,但不是服务器 2。
我不太了解我必须改变什么才能完成这项工作,如果有人能插话,我会很高兴。
提前致谢
总体而言,您的 iptables 规则对我来说看起来不错;虽然:
在问题描述中,您提到服务器 2 的 IP 地址为
192.168.1.62
;但在 iptables 规则中,您似乎正在使用192.168.1.63
它:这是一个地方或另一个地方的错字吗?
在描述中,您提到 Peer 2 (
10.0.0.3
) 不应访问 Jellyfin;但是在 iptables 规则中,您可以使用以下行授予它访问权限:也许您打算删除此规则?
我没有看到任何
PostDown
断开wg0-filter
链条的命令,就像您对其他自定义链条所做的那样;确保包括它们:如果没有这些拆卸命令,如果您进行更改并重新启动,最终
wg0-chain
可能会使用以前尝试的旧规则,而不是更新的更新。(并确保您遵循文章中的“进行配置更改”建议,在进行配置更改并重新启动之前关闭 WireGuard 界面 -sudo iptables-save
在界面关闭时运行以仔细检查您是否有任何旧规则或链没有清理干净。)