我在本地网络中运行 Wireguard “服务器”,我可以通过静态公共 IP 远程访问该服务器。我希望能够将对 Wireguard 远程对等点的访问限制在我局域网中的服务/机器上,我在该局域网中托管其他服务器。
示例:安装了 Wireguard 的服务器 1(192.168.1.23 | 10.0.0.1)+ 同一台机器上的 Nextcloud + Jellyfin 安装了 Photoprism 的服务器 2(192.168.1.62)
远程对等体 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
现在我可以从所有对等点访问我的局域网中的所有机器。
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
我关注了教程, 从贾斯汀·路德维希因为站点到点拓扑与我的非常相似。所以我尝试使用以下规则复制 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
这不起作用,对等点 1 和对等点 2 都可以访问服务器 1,但不能访问服务器 2。
我不太清楚要实现这个目标我需要做哪些改变,如果有人能参与进来我会很高兴。
提前致谢
答案1
总体而言,您的 iptables 规则对我来说看起来不错;尽管:
在问题描述中,您提到服务器 2 的 IP 地址为
192.168.1.62
;但在 iptables 规则中,您似乎正在使用192.168.1.63
它:iptables -A wg0-filter -d 192.168.1.63 -p tcp --dport 2342 -j to-photoprism
这是哪里的打字错误?
在描述中,您提到 Peer 2 (
10.0.0.3
) 不应有权访问 Jellyfin;但在 iptables 规则中,您使用以下行授予其访问权限:iptables -A to-jellyfin -s 10.0.0.3 -j ACCEPT
也许您的意思是删除这条规则?
我没有看到任何
PostDown
拆除wg0-filter
链条的命令,就像您对其他自定义链条一样;请确保将它们包括在内:PostDown = iptables -F wg0-filter PostDown = iptables -X wg0-filter
如果没有这些拆卸命令,如果您进行更改并重新启动,
wg0-chain
最终可能会使用以前尝试的旧规则,而不是较新的更新。(请确保您遵循进行配置更改文章中的建议是,在进行配置更改并重新启动之前关闭 WireGuard 界面——sudo iptables-save
在界面关闭时运行以仔细检查是否有任何尚未清理的旧规则或链。)