iptables转发技术
NAT
一. 什么是 NAT
NAT(Network Address Translation)译为网络地址转换。通常路由器在转发我们的数据包时,仅仅会将源MAC地址换成自己的MAC地址,但是NAT技术可以修改数据包的源地址、目的地址以及源端口、目的端口等信息。
二. NAT的作用
NAT技术最常见的应用就是通过修改源IP地址实现内网多主机使用一个公网地址接入互联网。NAT技术通常用于端口和流量的转发、重定向,实现如端口映射、跨网络访问、流量代理等功能。
二. iptables实现NAT转发
1.语法及参数介绍
iptables [-t TABLE] COMMAND CHAIN [num] 匹配条件 -j 处理动作
要使用iptables的NAT功能,我们首先需要启用网卡的IP转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
如果想要永久生效,我们要编辑/etc/sysctl.conf文件,设置net.ipv4.ip_forward = 1,然后用sysctl -p 命令使配置文件生效。
我们使用-t nat参数指明使用nat表,因为iptables默认使用filter表。
nat表同filter表一样有三条缺省的"链"(chains):
POSTROUTING:定义进行源地址转换规则,重写数据包的源IP地址
PREROUTING:定义进行目的地址转换的规则,可以把外部访问重定向到其他主机上
OUTPUT:定义对本地产生的数据包的目的转换规则。
我们要利用iptables进行NAT转换时,使用的动作主要为SNAT、DNAT和REDIRECT:
SNAT:源地址转换
DNAT:目的地址转换
REDIRECT:端口重定向
(1)规则操作
-A:在链的尾部添加一条规则
-D CHAIN [num]: 删除指定链中的第num条规则
-I CHAIN [num]:在指定链内第num条位置插入一条规则
-R CHAIN [num]: 替换链内指定位置的一条规则
(2)源/目的IP地址
-s:指定源地址
--dst:指定目的地址
(3)网络接口
-i:入站接口。对于`PREROUTING`链,只能用-i指定进来的网络接口
-o:出站接口。对于POSTROUTING和OUTPUT,只能用-o指定出去的网络接口
(4)动作
ACCEPT:放行
DROP:丢弃
REJECT:拒绝
MASQUERADE:地址伪装
LOG:日志
MARK:标记
三. 源/目的转发实例
1.源NAT(SNAT)
更改所有来自192.168.1.0/24的数据包的源IP地址为123.4.5.100
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 123.4.5.100
2.目的NAT(DNAT)
更改所有来自192.168.1.0/24的数据包的目的ip地址为123.4.5.100
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -i eth1 -j DNAT --to 123.4.5.100
3.IP映射实例
假设有这样的情况:A、B单位给自内网中部分用户要求建立自己的Web服务器对外发布信息。我们可以在防火墙的外部网卡上绑定多个合法公网IP地址,然后通过ip映射使发给其中某一个IP地址的包转发至内部某一用户的Web服务器上,并将该内部Web服务器的响应包伪装成该公网IP发出的包。
| 节点 | 内网IP | 公网IP |
|---|---|---|
| A单位Web服务器 | 192.168.1.100 | 123.4.5.100 |
| B单位Web服务器 | 192.168.1.200 | 123.4.5.200 |
| linux防火墙 | 192.168.1.1(eth1) | 123.4.5.1(eth0) |
在进行NAT之前,我们需要先将分配给A、B单位的公网ip绑定到防火墙的外网接口:
ifconfig eth0 add 123.4.5.100 netmask 255.255.255.0
ifconfig eth0 add 123.4.5.200 netmask 255.255.255.0
对防火墙接收到的目的ip为123.4.5.100和123.4.5.200的所有数据包进行目的NAT(DNAT):
iptables -A PREROUTING -i eth0 -d 123.4.5.100 -j DNAT --to 192.168.1.100
iptables -A PREROUTING -i eth0 -d 123.4.5.200 -j DNAT --to 192.168.1.200
其次,对防火墙接收到的源ip地址为192.168.1.100和192.168.1.200的数据包进行源NAT(SNAT):
iptables -A POSTROUTING -o eth0 -s 192.168.1.100 -j SNAT --to 123.4.5.100
iptables -A POSTROUTING -o eth0 -s 192.168.1.200 -j SNAT --to 123.4.5.200
这样,所有目的ip为123.4.5.100和123.4.5.200的数据包都将分别被转发给192.168.1.100和192.168.1.200;
而所有来自192.168.1.100和192.168.1.200的数据包都将分别被伪装成由123.4.5.100和123.4.5.200,从而也就实现了ip映射。
iptables -t nat -A PREROUTING -d 公网ip -p tcp --dport 公网端口 -j DNAT --to 内网ip:内网服务端口
iptables -t nat -A POSTROUTING -d 内网ip -p tcp --dport 内网服务端口 -j SNAT --to-source 网关外网IP
| 节点 | 内网IP(eth0) | 公网IP(eth1) |
|---|---|---|
| 网关 | 10.0.0.1 | 123.4.5.100 |
| 内网主机 | 10.0.0.20 |
例:把内网ssh服务映射到外网。iptables规则配置如下:
iptables -t nat -A PREROUTING -d 123.4.5.100 -p tcp --dport 2222 -j DNAT --to-destination 10.0.0.20:22
iptables -t nat -A POSTROUTING -d 10.0.0.20 -p tcp --dport 22 -j SNAT --to-source 123.4.5.100
把访问公网123.4.5.100:2222的数据包转发到了内网10.0.0.20:22
四.端口转发实例
1.本机端口转发
把发往本机80端口的数据重定向到8080端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
2.远程端口转发
把访问123.4.5.100:8080的数据包转发到123.4.5.200:80
iptables -t nat -A PREROUTING -d 123.4.5.100 -p tcp --dport 8080 -j DNAT --to-destination 123.4.5.200:80
多网卡问题:iptables学习笔记:端口转发命令优化
iptables转发技术的更多相关文章
- CentOS下OpenVPN实现公网IP映射到内网(iptables转发功能)(转)
说明:这种方案的实现前提是必须要有一台拥有公网IP的电脑,OpenVPN搭建过程很普通,关键技术在于iptables的转发.搭建教程可能有点旧了,可以只看iptables的关键点技术. 方案背景: 公 ...
- 集群IPtables转发与防火墙
子网集群通过接入公网的服务器Iptables转发上网 1. 对iptables进行初始化工作 清空filter表 iptables -F 清空nat表 iptables -t nat -F 默认禁止所 ...
- iptables转发安卓手机热点的数据到指定的端口
iptables转发安卓手机热点的数据到指定的端口 手机安装了VPN,可以上GOOGLE的那种.然后我打开手机的热点,连上笔记本,想让本本上个google 没想到被GFW挡住了.看了一下手机的网络工作 ...
- iptables nat 技术转发
NAT 一. 什么是 NAT NAT(Network Address Translation)译为网络地址转换.通常路由器在转发我们的数据包时,仅仅会将源MAC地址换成自己的MAC地址,但是NAT技术 ...
- 五分钟彻底学会iptables防火墙--技术流ken
iptables简介 IPTABLES 是与最新的 3.5 版本 Linux内核集成的 IP 信息包过滤系统.如果 Linux 系统连接到因特网或 LAN.服务器或连接 LAN 和因特网的代理服务器, ...
- Linux内核转发技术
前言 在linux内核中,通常集成了带有封包过滤和防火墙功能的内核模块, 不同内核版本的模块名称不同, 在2.4.x版本及其以后的内核中, 其名称为iptables, 已取代了早期的ipchains和 ...
- iptables转发
需求 将流入服务器的公网IP的80端口的流量全部转发到另一个公网IP(1.2.3.4)的80端口上. 操作 iptables -P FORWARD ACCEPT iptables -t nat -A ...
- (转载)iptables 转发oracle端口
本文出自 “乡丅亻” 博客,请务必保留此出处http://shaowu.blog.51cto.com/627407/514909 项目组同事需要将SQL请求转发到另一台服务器上,于是通过iptable ...
- iptables转发端口
1.本机端口转发 把发往本机80端口的数据重定向到8080端口 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-por ...
随机推荐
- XamarinAndroid组件教程RecylerView适配器设置动画
XamarinAndroid组件教程RecylerView适配器设置动画 本小节将讲解动画相关设置,如动画的时长.插值器以及复合动画等. 1.设置动画时长 设置动画持续的时间可以使用Animation ...
- 帝国移动pc站文章
帝国建站的时候发现,如果在PC站发文章,那么移动站的文章正文无法显示... 搜索调试了很久,原来是要对config进行配置. 在移动站config.php文件,对 $ecms_config['sets ...
- 上海交大ACM总教头俞勇讲述“最聪明人的故事”
这是一场世界大学生之间"最强大脑"的较量:这是拥有数十年历史的ACM国际大学生计算机程序设计大赛的赛场:斯坦福.加州理工.麻省理工.哈佛--当一个又一个在计算机科学领域拥有世界顶尖 ...
- [JSOI2018]列队
Description: 作为一名大学生,九条可怜在去年参加了她人生中的最后一次军训. 军训中的一个重要项目是练习列队,为了训练学生,教官给每一个学生分配了一个休息位置.每次训练开始前,所有学生都在各 ...
- Centos 7 安装配置
修改网卡 最小化安装没有安装vim,暂时使用vi 进入到network-scripts 目录 [root@node1 ~]# cd /etc/sysconfig/network-scripts/ [r ...
- microsoft viso 下载地址
https://pan.baidu.com/s/1pLBhG19
- C#自动识别文件编码
以下代码源自:http://www.cnblogs.com/stulzq/p/6116627.html /// <summary> /// 用于取得一个文本文件的编码方式(Encoding ...
- this-11.1-笔记
1. 基本数据类型:string undefined null boolean number 引用数据类型 Object array function 1.2 二者的区别 基本数据 ...
- python之组合与重用性
1 组合 组合的概念:软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 >>> class Equip: ...
- Node_初步了解(3)回调,作用域,上下文
1. //回调:回调是异步编程最基本的方法,node.js需要按顺序执行异步逻辑的时候,一般采用后续传递的方式,将后续逻辑封装在回调函数中,作为起始函数的参数. //具名函数 function lea ...