我有一台有两个外部 IPv4 地址的服务器。其中一个地址基本上没用,因为它没有出现在任何 DNS 中,我也没有用它做任何事情。我现在想使用端口 80,但我正在该机器上使用 Web 服务器 (lighttpd),该服务器监听 0.0.0.0:80,很难让它停止监听,否则会产生不愉快的后果(要么我失去让它监听 127.0.0.1 的功能,要么必须完全重写它的所有配置,不使用任何全局设置)。
有没有更简单的方法?我可以将“未使用”IP 上的端口 80 转发到其他地方,以便堆栈在数据包到达监听 lighttpd 之前将其转移?我希望通过同一台机器上的 VPN 适配器转发它:
服务器:
Public IP1 on eth0 = 55.66.77.8
Public IP2 on eth1 = 55.66.77.10
Wireguard IP on wg = 10.20.2.1
Lighttpd listening on 0.0.0.0:80
我可以从 Lighttpd 监听中转发 eth1 55.66.77.10:80
-> wg 吗?10.20.2.15:8080
我试过:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 10.20.2.15:8080
iptables -t nat -A POSTROUTING -p tcp -d 10.20.2.15 --dport 8080 -j SNAT --to-source 10.20.2.1
...正在通过 VPN 转发同一台机器上的其他端口。但在这种情况下,telnet 55.66.77.10 80
仍然到达 lighttpd,并且不会被转发。
答案1
lighttpd 套接字从全局范围继承,因此如果你的配置在全局范围内,那么你可以
server.bind = "55.66.77.8"
$SERVER["socket"] == "127.0.0.1:80" { }
你之前收听的地方"*:80"
如果您担心修改现有配置,您可以在末尾添加一个包含文件,并使用覆盖某些设置:=
,例如
server.bind := "55.66.77.8"
iptables 的另一种解决方案是让 lighttpd 充当 10.20.2.15:8080 的反向代理,使用lighttpd mod_proxy. 如果监听端口 443,lighttpd 也可以执行 TLS 终止。