如何利用iptables进行路由转发、端口映射 |
您所在的位置:网站首页 › linux服务器端口映射怎么设置 › 如何利用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这条链路,如下图所示: 所以我们需要PREROUTING、FORWARD、POSTOUTING三条链上操作,路由判决是内核根据IP地址进行自动判断包的去向,所以我们不用管这个。 四、实现 环境搭建示意图:
方案一 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为客户端
电脑B为服务端
测试二: 电脑A为服务端
电脑B为客户端
方案二 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
第一行:默认的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才生效 第二、三行指令:删除系统中存在的规则 第六行:表明在路由转发前,将目的地址为198.120.0.202,目的端口为12345的tcp包的目的地址转化为100.100.100.8,端口映射为5678 第七行:表明在路由转发前,将目的地址为100.100.100.100,目的端口为5678的tcp包的目的地址转化为198.120.0.8,端口映射为12345 第八行:表示自动获取当前网卡的IP地址进行源地址转换 第十~十二行:白名单功能,增加允许转发
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数) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |