我在我的本地网络中运行一个 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。
我不太了解我必须改变什么才能完成这项工作,如果有人能插话,我会很高兴。
提前致谢