我有一个 WireGuard 服务器作为边缘路由器。将所有 http 流量转发到我的网络服务器。一切正常,但有一个问题。Web 服务器无法通过 WireGuard 公共 IP 地址访问自身。在网络服务器计算机上,我无法使用网络浏览器访问我的网站。
我发现daddr
基于 nat 可以解决这个问题,但我想知道是否有更好的方法,因为 IP 地址可能会有所不同但iif
已修复。我的 Netgear WiFi 路由器可以进行端口转发,而不会出现这种问题。但我无法检查它的内部规则,我也不认为它使用daddr
基于 nat。
这是WireGuard 服务器的配置。
wg0
interface: wg0
Address = 10.0.0.1/24
public key: (hidden)
private key: (hidden)
listening port: 51820
peer: (hidden)
endpoint: (hidden):51820
allowed ips: 10.0.0.2/32
latest handshake: 56 seconds ago
transfer: 20.69 MiB received, 115.85 MiB sent
表格
table ip firewall {
chain input {
type filter hook input priority filter; policy drop;
ct state established,related accept
udp dport {51820} accept
tcp dport {22} accept
ip saddr 10.0.0.0/24 accept
}
chain prerouting {
type nat hook prerouting priority dstnat;
iif eth0 tcp dport {80,443} dnat to 10.0.0.2
}
chain postrouting {
type nat hook postrouting priority srcnat;
ip saddr 10.0.0.0/24 masquerade
}
chain forward {
type filter hook forward priority filter; policy drop;
ct state established,related accept
ct status dnat accept
ip saddr 10.0.0.0/24 accept
}
}
这是Web服务器的配置。
wg0
interface: wg0
Address = 10.0.0.2/24
public key: (hidden)
private key: (hidden)
listening port: 51820
fwmark: 0xca6c
peer: (hidden)
endpoint: (hidden):51820
allowed ips: 0.0.0.0/0
latest handshake: 25 seconds ago
transfer: 114.69 MiB received, 3.56 MiB sent
persistent keepalive: every 25 seconds