iptables nat 技术转发
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 nat 技术转发的更多相关文章
- iptables之NAT端口转发设置
背景:服务器A:103.110.114.8/192.168.1.8,有外网ip,是IDC的一台服务器服务器B:192.168.1.150,没有外网ip,A服务器是它的宿主机,能相互ping通服务器C: ...
- iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链
iptables常用规则:屏蔽IP地址.禁用ping.协议设置.NAT与转发.负载平衡.自定义链 时间 -- :: IT社区推荐资讯 原文 http://itindex.net/detail/4772 ...
- centos7 && centos6.5部KVM使用NAT联网并为虚拟机配置firewalld && iptables防火墙端口转发
centos7 && centos6.5 部KVM使用NAT联网并为虚拟机配置firewalld && iptables防火墙端口转发 一.准备工作: 1: 检查kvm ...
- linux centos6 NAT 端口转发
有很多时候我们为了安全,需要将例如数据库服务器放到内网中.但是有些时候又系统给外网开一个端口,这时就可以利用外网的服务器进行一个端口转发.今天我们以centos6 为例进行端口转发配置. 首先vi / ...
- NAT技术基本原理与应用
转载自:http://www.cnblogs.com/derrick/p/4052401.html?utm_source=tuicool&utm_medium=referral#undefin ...
- iptables nat及端口映射
iptables nat及端口映射 发布: 2010-6-11 15:05 | 作者: admin | 来源: SF NetWork 门户网站 iptables 应用初探(nat+三层访问控制) ip ...
- VMware实现iptables NAT及端口映射
1. 前言 本文只讲解实战应用,不会涉及原理讲解.如果想要了解iptables的工作流程或原理可参考如下博文. 具体操作是在PC机的VMware虚拟机上进行的,因此涉及的地址都是内网IP.在实际工作中 ...
- iptables 设置端口转发/映射
iptables 设置端口转发/映射 服务器A有两个网卡 内网ip:192.168.1.3 外网ip:10.138.108.103 本地回环:127.0.0.1 服务器B有网卡,8001提供服务 内网 ...
- iptables filter表 案例、iptables nat表的路由功能 、端口映射
1.小案例 #!/bin/bashipt="/usr/sbin/iptables"$ipt -F$ipt -P INPUT DROP$ipt -P OUTPUT ACCEPT$ip ...
随机推荐
- 挑战常规--搭建gradle、maven私人仓库很简单
常规 百度搜索“搭建maven私有仓库”,搜索到的结果几乎都是使用nexus 不一样的简单 如果了解maven上传原理,完全没必要搞得那么复杂庞大,区区不足百行代码就可以实现一个私有仓库. maven ...
- HDU 1847 Good Luck in CET-4 Everybody!(找规律版巴什博奕)
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- RabbitMQ 在 web 页面 创建 exchange, queue, routing key
这里只是为了展示, 在实际开发中一般在消费端通过 注解来自动创建 消费端: https://www.cnblogs.com/huanggy/p/9695934.html 1, 创建 Exchange ...
- Redis常用命令【字符串】
1.启动Redis客户端 进入src目录下,执行:redis-cli启动Redis客户端 2.help 帮助 帮助命令,用来查看redis命令的使用方式 3.set 设置 3.1设置 3.2不存在才设 ...
- DJANGO_SETTINGS_MODULE is undefined报错的解决
问题: ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is ...
- MySQL----mysql57服务突然不见了的,解决方法
一. G:\MySQL\MySQL Server 5.7\bin>mysqld --initialize G:\MySQL\MySQL Server 5.7\bin>mysqld -ins ...
- mssql sql server上如何建一个只读视图–视图锁定的另类解决方案
转自:http://www.maomao365.com/?p=4508 <span style="color:red;font-weight:bold;">我们熟知一个 ...
- MySQL高性能优化实战总结!
1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多 ...
- Latch导致MySQL Crash
作者:沃趣科技数据库专家 董红禹 问题概述 最近我们遇到一个MySQL的问题,分析后很有代表意义,特地写出来供大家参考.出现问题是,数据库先是被置为只读,然后过了一段时间,MySQL直接Crash掉了 ...
- 【RHEL7.0】软件包管理
1.常用的RPM软件包命令 安装软件的命令格式 rpm –ivh filename.rpm 升级软件的命令格式 rpm –Uvh filename.rpm 卸载软件的命令格式 rpm –e fi ...