iptables端口转发

110 次阅读

本文最后更新于 2026年5月11日。

要让机器 C 通过局域网访问机器 A,需要确保以下条件得到满足:
如果机器 A、B、C 分属不同的子网,或者网络拓扑要求必须通过机器 B 访问机器 A,那么需要在机器 B 上设置端口转发规则,将来自 C 的请求转发到机器 A。
具体的端口转发配置方法取决于机器 B 的操作系统和防火墙类型。例如,可以使用 iptables(Linux)、pf(macOS/BSD)、netsh(Windows)等工具设置端口转发规则。
确保完成上述配置后,机器 C 应该能够成功访问机器 A 上提供的服务。如果仍然无法访问,可以检查日志(如服务日志、防火墙日志、路由日志等)以进一步排查问题。

在没有图形界面的CentOS系统中,端口转发一般是通过终端命令进行设置的。但是,如果你想要在图形界面中设置端口转发,你可以安装并使用一些网络管理工具,比如FirewallD。

FirewallD是一个可以管理iptables规则的用户友好的界面。它包含一个命令行界面‘firewall-cmd’和一个图形界面‘firewall-config’。

首先,你需要使用yum进行安装(如果你的CentOS系统已经有了FirewallD,就可以跳过这一步):

sudo yum install firewalld -y  

然后启动并使其自动启动:

sudo systemctl start firewalld  
sudo systemctl enable firewalld  

如果你的CentOS有图形界面,你可以在终端输入以下命令打开FirewallD的图形界面:

firewall-config  

在firewall-config的界面中,你可以对网络规则进行管理。选择’规则和区域‘选项卡,点击下方的’添加’按钮,然后在打开的菜单中选择 ‘端口转发’。接下来,你就可以根据需要设置你的转发规则了。

而在没有图形界面的环境中,你可以使用firewall-cmd命令进行端口转发的设置。比如,如果你想把所有发往本地的22端口的TCP流量都转发至远程的2222端口,你可以使用以下命令:

sudo firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=2222  
sudo firewall-cmd --reload  

再次声明,虽然图形界面更便于操作,但在服务器环境中,我们经常采用命令行操作,因为其效率更高且更方便脚本化处理。

此外,不同的环境和需求可能有不同的设置,以上只是一种常见的设置方法。具体的端口转发设置可能会更复杂,取决于你的具体需求和环境。

由于firewalld的启动问题没解决,准备用iptables

安装iptables

sudo yum install iptables-services  # 对于 CentOS/RHEL 7+

安装后1panel就连不上了,估计默认不允许除了22端口外的其他流量。

通过阿里云连接客户端设置防火墙允许任何端口流量

# 清除现有规则(谨慎操作,这会移除所有已有的防火墙规则)
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

然后就可以访问了。

在宿主机上获取docker0的IP

[ecs-assist-user@iZ8vbajg9wo8iwynfb1lgeZ ~]$ # 在宿主机上获取docker0的IP
[ecs-assist-user@iZ8vbajg9wo8iwynfb1lgeZ ~]$ ip addr show docker0 | grep inet | awk '{print $2}' | cut -d/ -f1
172.18.0.1

临时启用iptables的端口转发

sudo sysctl -w net.ipv4.ip_forward=1

配置文件中增加规则(/etc/sysconfig/iptables):

sudo iptables -A FORWARD -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A PREROUTING -p tcp --dport 11434 -j DNAT --to-destination 10.176.121.59:11434