我正在使用Linux计算机作为更广泛的网络和几个服务器之间的网关/防火墙。
WAN -> [ 192.x | GATEWAY (Linux) | 10.x ] -> [ 10.0.0.100 | SERVER (Linux) ]
这种配置作为网关运行得很好。下游节点可以很好地访问Internet,并且我可以将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
)就不能再回到端口80
上的WAN
。这是一个问题,因为这意味着服务器无法在互联网上达到任何HTTP流量。
服务器可以curl
任何互联网资源,除非它在端口80
上,而转发规则到位。
网关只有一个物理NIC,它位于external
区域,这允许伪装。
gateway:$ ip addr
1: lo: 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: 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: 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
,有什么是无效的吗?
发布于 2021-06-05 23:17:26
在我的场景中,也许可以使用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
https://unix.stackexchange.com/questions/652012
复制相似问题