ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2021-01-29 14:02:13  阅读:281  来源: 互联网

标签:iptables 198.120 -- 100.100 端口映射 24 FORWARD 数据包 路由


一、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

 

  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数)

标签:iptables,198.120,--,100.100,端口映射,24,FORWARD,数据包,路由
来源: https://blog.csdn.net/u011906600/article/details/113383949

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有