iptables双网卡路由转发

Linux

服务器上CentOS系统双网卡,网卡1接内网IP为192.168.4.128,外网IP为x.x.x.x,网卡2 IP为192.168.1.8,只有网卡2才能访问指定IP的端口88。主要实现外网IP为x.x.x.x的端口88转发到网卡2指定IP的端口88这样一个需求。这样的需要其实很常见的,因为有时为了安全只有内网的才能访问的服务就只能用iptables双网卡转发了。下面看看CentOS用iptables实现双网卡转发的具体思路和步骤。

1、ifconfig设置并查看网卡的IP地址。
eth网卡信息

2、让指定的IP可以访问,默认路由是网卡1的网关,route设置路由指定IP的网关或者网卡。

1
[root@IM ~]# route #查看当前的路由,一般情况下,默认添加指向网关的路由。

default-route

1
2
[root@IM ~]# route add x.x.x.x gw 192.168.1.1 #设置指定IP的网关为网卡2的网关,默认是网卡1的网关
[root@IM ~]# route

route路由

3、开启包转发
在 CentOS 中内核已经包含了路由功能,但系统启动时包转发功能默认是关闭的。开启 CentOS 包转发的功能可以使用sysctl命令或者在配置文件/etc/sysctl.conf修改,sysctl只是临时生效,重启后失效,修改配置文件/etc/sysctl.conf则是永久有效。
数据包转发功能可以使用如下的命令。

1
2
3
4
[root@IM ~]# sysctl net.ipv4.ip_forward #查看当前系统是否支持包转发。
[root@IM ~]# sysctl -w net.ipv4.ip_forward=1 #重启后失效
[root@IM ~]# vi /etc/sysctl.conf #重启后任然有效
net.ipv4.ip_forward = 1

4、使用iptables设置转发规则

1
2
3
4
5
6
7
8
9
[root@IM ~]# iptables -t -nat -A PREROUTING -d 192.168.4.128/32 -p tcp -m tcp --dport 88 -j DNAT --to-destination x.x.x.x:88 #外网的IP是映射到内网的IP,进来的IP88端口转发到指定IP的端口88
[root@IM ~]# iptables -t -nat -A POSTROUTING -d x.x.x.x -p tcp -m tcp --dport 88 -j SNAT --to 192.168.1.8 #返回的时候先外网的IP转发到网卡2的IP上。
[root@IM ~]# iptables -t -nat -A POSTROUTING -d 192.168.1.8 -p tcp -m tcp --dport 88 -j SNAT --to 192.168.4.128
#再把网卡2的IP转发到网卡1的IP地址,这样就可以从外网的IP返回了。
[root@IM ~]# service iptables save #把iptables规则保存到文件中
[root@IM ~]# vi /etc/rc.local #把iptbles规则写到开启启动中
#load iptbales
iptables-restore > /etc/sysconfig/iptables
[root@IM ~]# service iptables restart #重启iptables。

在实际生产过程中使用iptables路由转发的需求是非常多的。我们在做iptables转发的时候一定要多去测试,一步一步的验证。双网卡的时候一定要注意转发的差异性,主要是网卡间的转发。

来源:iptables双网卡路由转发

发表评论

电子邮件地址不会被公开。 必填项已用*标注