我使用 Linux 计算机作为更广泛的网络和一些服务器之间的网关/防火墙。
WAN -> [ 192.x | GATEWAY (Linux) | 10.x ] -> [ 10.0.0.100 | SERVER (Linux) ]
此配置作为网关工作良好。下游节点可以很好地访问互联网,并且我可以使用 .port 将80
网关处的请求转发到服务器8000
上firewall-cmd
。
firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.0.0.100:toport=8000
然而,一旦我运行该命令并且端口转发开始,服务器 ( 10.0.0.100
) 就不再能够返回到WAN
on 端口80
。这是一个问题,因为这意味着服务器无法访问互联网上的任何 HTTP 流量。
服务器可以是curl
任何互联网资源除了80
如果在转发规则到位时它位于端口上。
网关只有一个物理网卡,并且位于区域中external
,因此可以进行伪装。
gateway:$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether dc:a6:32:1b:40:9e brd ff:ff:ff:ff:ff:ff
inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet 10.0.0.1/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::dea6:32ff:fe1b:409e/64 scope link
valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether dc:a6:32:1b:40:9f brd ff:ff:ff:ff:ff:ff
gateway:$ ip route
default via 192.168.0.1 dev eth0 onlink
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.1
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
我可能错过了一些有关网络的基本租户,这使我无法理解这个问题。
我的假设是转发规则使得它如此全部端口 80 流量(入站或出站)受到破坏,而实际上我只想将 80 端口的入站流量转发到我的服务器的 8000。
是否可能是网络配置错误?或者我的使用方式有什么firewalld
无效的吗?
答案1
也许iptables
或firewalld
可以在我的场景中用于端口转发到下游子网上的特定计算机,但我不知道如何让它工作。
gateway
这可能并不理想,但我的解决方法是在我的计算机上创建一个 systemd 服务,用于socat
将特定端口上的流量转发到特定 IP。
gateway
这是在我的转发端口80
和443
上运行的脚本10.0.0.100
。
firewall-cmd --zone=external --add-port=80/tcp
socat TCP4-LISTEN:80,fork TCP4:10.0.0.100:80 &
firewall-cmd --zone=external --add-port=443/tcp
socat TCP4-LISTEN:443,fork TCP4:10.0.0.100:443 &
wait