iptables端口转发配置实现

一、iptables端口转发实现

需求描述:应用系统部署在C主机上且服务端口为3306,此时需要A主机访问C主机的3306端口。因为网络策略原因A主机与C主机之间无法直接访问,但A主机与B主机网络互通,B与C之间网络互通。所以从B主机进行中转,以达到A主机与C主机网络打通的目的。即10.41.1.1访问10.42.2.2:3307端口,并通过iptables将请求转发到10.43.3.3:3306端口

操作系统:Centos 7

示例IP:

A主机:10.41.1.1(请求发起主机)

B主机:10.42.2.2(转发实现主机,转发操作在该主机上进行操作)

C主机:10.43.3.3(应答主机,应用系统部署所在主机)

需求实现(所有转发操作都在B主机上执行):

1.开启Linux内核的转发功能,编辑 /etc/sysctl.conf文件

将net.ipv4.ip_forward = 0
修改为:net.ipv4.ip_forward = 1
开启内核转发功能

2.修改完成后执行:sysctl -p  使配置修改生效

3.检查iptables状态,确保iptables处于运行状态

systemctl status iptables

开启状态

4.添加转发规则到iptables规则表中

iptables -t nat -A PREROUTING -p tcp --dport 3307 -j DNAT --to-destination 10.43.3.3:3306

5.为转发请求指明请求来源,将请求B主机3307端口转发至C主机3306端口

iptables -t nat -A POSTROUTING -p tcp -d 10.43.3.3 --dport 3306 -j SNAT --to-source 10.42.2.2

6.放行转发命令

#eth0改为实际使用网卡(一般是eth0)
# 放行Forward的数据包
iptables -I FORWARD -i eth0 -j ACCEPT
# 开启网卡混杂模式(允许任意流向的数据包)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

7.保存转发规则(一直生效)

service iptables save
#执行这条命令后才会将规则保存至系统配置中,即使机器重启也不会有影响,否则下次机器重启时规则会失效

8.功能验证

在A主机上执行:telnet 10.42.2.2 3307端口,能通说明配置成功

二、iptables端口转发实现过程的坑

1.服务器为云服务器时,源端、目的端防火墙or安全组需要进行放开

2.配置完端口转发规则后需要放开网卡的数据转发规则,步骤6

3.主机的内核转发配置是否放开,步骤1

三、iptables nat转发规则删除

语法: iptables -t nat -D chain rulenum [options]
注解: chain 是链的意思,就是INPUT FORWARD 之类的定语
rulenum 是该条规则的编号。从上往下数,确定需要删除的规则序号

可以使用 iptables -t nat -L -n 列出指定的链的规则的编号后对指定规则进行删除

示例:

[root@VM-centos ~]# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3307 to:10.224.65.3:3306
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3308 to:10.224.64.12:3306
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3309 to:10.224.64.11:3306
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3310 to:10.226.64.213:3306

删除第四条nat转发规则,执行命令:

iptables -t nat -D POSTROUTING 4

centos7操作系统默认使用firewalld,在执行:systemctl status iptables时,报错:Failed to restart iptables.service: Unit not found.

原因是centos7操作系统没有安装iptables,此时执行以下两条命令后即可

yum install -y iptables

yum install iptables-services -y   #主要是这个

执行完成上面两条命令后,再次执行systemctl status iptables  即可恢复正常

iptables启动:systemctl start iptables

iptables重启:systemctl restart iptables

iptables查看启动状态:systemctl status iptables

  • 8
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值