如何利用iptables进行路由转发、端口映射

一、iptables简介

        IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

        防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。

(源自百度)

 

二、背景

        一个内部局域网中有多台服务器提供不同的服务,如web服务、FTP服务、ssh、telnet等,通过服务器(或网关、防火墙)连接外部网络,如果外部网络上的主机和局域网设备进行相互通信,则需要中间设备转发。再转述成另一种应用场合,服务器有2个网卡,分别连接内外网。外网无法直接访问设备上的数据、服务。在服务器上实现转发后,则可达到目的。


三、原理

iptables的“四表五链”其实是对用户设置规则的管理,是看待用户设置的规则的两个维度。

  • filter表——过滤数据包

  • Nat表——用于网络地址转换(IP、端口)

  • Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS

  • Raw表——决定数据包是否被状态跟踪机制处理

表的处理优先级:raw>mangle>nat>filter

 

  • INPUT链——进来的数据包应用此规则链中的策略

  • OUTPUT链——外出的数据包应用此规则链中的策略

  • FORWARD链——转发数据包时应用此规则链中的策略

  • PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来时都先由这个链处理)

  • POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时都先由这个链处理)

 

表(tables)

链(chains)

INPUT

FORWARD

OUPUT

PREROUTING

POSTROUTING

filter

   

nat

   

mangle

raw

   

 

要实现转发则数据包通过的流程为:PREROUTING->路由判决->FORWARD->POSTOUTING这条链路,如下图所示:

如何利用iptables进行路由转发、端口映射_第1张图片

所以我们需要PREROUTING、FORWARD、POSTOUTING三条链上操作,路由判决是内核根据IP地址进行自动判断包的去向,所以我们不用管这个。

 

四、实现

环境搭建示意图:

 

如何利用iptables进行路由转发、端口映射_第2张图片

 

方案一

1、配置

(1)个人电脑A配置

route  add -net 198.120.0.0/24 gw 100.100.100.100

(2)个人电脑B配置注:配置电脑A访问198.120.0.0/24网段的网关为100.100.100.100

route  add -net 100.100.100.0/24 gw 198.120.0.202

(3)arm设备配置注:配置电脑B访问100.100.100.0/24网段的网关为198.120.0.202

echo  "1" > /proc/sys/net/ipv4/ip_forwardiptables  -Fiptables  -t nat -Fiptables  -A FORWARD -j REJECTiptables  -I FORWARD -i eth3 -s 198.120.0.0/24 -p tcp --dport 12345 -j ACCEPTiptables  -I FORWARD -o eth3 -d 198.120.0.0/24 -p tcp --sport 12345 -j ACCEPTiptables  -I FORWARD -i eth11 -s 100.100.100.0/24 -p tcp --dport 12345 -j ACCEPTiptables  -I FORWARD -o eth11 -d 100.100.100.0/24 -p tcp --sport 12345 -j ACCEPT

注:默认的linux的包转发功能是关闭的,可通过命令cat /proc/sys/net/ipv4/ip_forward查看(0为关闭,1为打开),如果要让我们的linux实现转发,则需要打开这个转发功能,可以改变它的一个系统参数,使用echo "1" > /proc/sys/net/ipv4/ip_forward命令打开转发功能,仅为临时打开,重启失效。永久生效,修改/etc/sysctl.conf文件,net.ipv4.ip_forward = 1,修改配置文件后使用sysctl -p才生效

 

2、    测试截图

测试一:

电脑A为客户端

如何利用iptables进行路由转发、端口映射_第3张图片

 

电脑B为服务端

如何利用iptables进行路由转发、端口映射_第4张图片

 

如何利用iptables进行路由转发、端口映射_第5张图片

测试二:

电脑A为服务端

如何利用iptables进行路由转发、端口映射_第6张图片

 

电脑B为客户端

 

 

 

如何利用iptables进行路由转发、端口映射_第7张图片

 

如何利用iptables进行路由转发、端口映射_第8张图片

 


方案二

1、配置

(1)个人电脑A配置

电脑A的网关设置为

100.100.100.100

(2)个人电脑B配置

电脑B的网关设置为

198.120.0.202

(3)arm设备配置

echo  "1" > /proc/sys/net/ipv4/ip_forwardiptables  -Fiptables  -t nat -Fiptables  -A FORWARD -j REJECTiptables  -t nat -A POSTROUTING -s 198.120.0.0/24 -j SNAT --to 100.100.100.100iptables  -t nat -A POSTROUTING -s 100.100.100.0/24 -j SNAT --to 198.120.0.202 iptables  -I FORWARD -i eth3 -s 198.120.0.0/24 -p tcp --dport 12345 -j ACCEPTiptables  -I FORWARD -o eth3 -d 198.120.0.0/24 -p tcp --sport 12345 -j ACCEPTiptables  -I FORWARD -i eth11 -s 100.100.100.0/24 -p tcp --dport 12345 -j ACCEPTiptables  -I FORWARD -o eth11 -d 100.100.100.0/24 -p tcp --sport 12345 -j ACCEPT

 

 

方案三

1、配置

(1)个人电脑A配置

        IP地址需与eth11在同一网段,网关可不设置

(2)个人电脑B配置

        IP地址需与eth3在同一网段,网关可不设置

(3)arm设备配置

echo  "1" > /proc/sys/net/ipv4/ip_forwardiptables  -Fiptables  -t nat -Fiptables  -A FORWARD -j REJECT iptables  -t nat -A PREROUTING -d 198.120.0.202 -p tcp --dport 12345 -j DNAT --to  100.100.100.8:5678iptables  -t nat -A PREROUTING -d 100.100.100.100 -p tcp --dport 5678 -j DNAT --to  198.120.0.8:12345iptables  -t nat -I POSTROUTING -j MASQUERADE iptables  -I FORWARD -i eth3 -s 198.120.0.0/24 -p tcp --dport 5678 -j ACCEPTiptables  -I FORWARD -o eth3 -d 198.120.0.0/24 -p tcp --sport 5678 -j ACCEPTiptables  -I FORWARD -i eth11 -s 100.100.100.0/24 -p tcp --dport 12345 -j ACCEPTiptables  -I FORWARD -o eth11 -d 100.100.100.0/24 -p tcp --sport 12345 -j ACCEPT

 

  1. 第一行:默认的linux的包转发功能是关闭的,可通过命令cat/proc/sys/net/ipv4/ip_forward查看(0为关闭,1为打开),如果要让我们的linux实现转发,则需要打开这个转发功能,可以改变它的一个系统参数,使用echo "1" > /proc/sys/net/ipv4/ip_forward命令打开转发功能,仅为临时打开,重启失效。永久生效,修改/etc/sysctl.conf文件(装置可能不存在这个文件),net.ipv4.ip_forward= 1,修改配置文件后使用sysctl -p才生效

  2. 第二、三行指令:删除系统中存在的规则

  3. 第六行:表明在路由转发前,将目的地址为198.120.0.202,目的端口为12345的tcp包的目的地址转化为100.100.100.8,端口映射为5678

  4. 第七行:表明在路由转发前,将目的地址为100.100.100.100,目的端口为5678的tcp包的目的地址转化为198.120.0.8,端口映射为12345

  5. 第八行:表示自动获取当前网卡的IP地址进行源地址转换

  6. 第十~十二行:白名单功能,增加允许转发

     

 

2、备注

  • 个人电脑A访问的IP为100.100.100.100

  • 个人电脑B访问的IP为198.120.0.202

  • iptables指令在重启后,如果未进行再次设置,已生效的指令会消失,需要再次设置,上述指令可直接写在脚本文件(setup.sh)中,自动重启执行,如果需要更改规则,修改脚本文件中的iptables指令。

  • 查看filter表的规则指令

 

iptables --line -nvL
  • 删除filter表对应的规则指令

iptables -D chain num

(本例中chain仅为FORWARD,num数为上述指令查看filter表中规则对应的num数)

  • 查看nat表中的规则指令

iptables --line -t nat -nvL
  • 删除nat表中对应的规则

iptables -t nat -D chain num

(本例中chain仅为POSTROUTING,num数为上述指令查看nat表中规则的对应num数)

你可能感兴趣的:(Linux,iptables,网关,网络,linux,运维,iptables)