文档章节

Linux 实现 NAT

诸葛孔明亮
 诸葛孔明亮
发布于 2016/11/08 16:27
字数 895
阅读 27
收藏 0

前言

    NAT:网络地址转换(Network Address Translation),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP封包通过路由器或防火墙时重写來源IP地址或目的IP地址的技术。

    简单来说在数据传输中,经过7层网络结构时,为了实现三次握手,就需要在发送数据的时候告诉目的地你的位置,以便对方可以回复,但是在数据报中只有起点域和目的域,不可能所有的终端都是点对点连接的,这时候就需要一个中转站来传递消息数据,这里只讨论软件来实现 nat,路由器的由于基本不会直接操作,就没查资料了。

 

iptables 实现 NAT

    iptables 作用的 5 条规则链中,有两条是 PREROUTING、POSTROUTING,分别代表的是路由前和路由后,iptables 就是实现 nat 的一种方式。

    检查系统是否开启了 ip 转发功能:

    cat /etc/sysctl.conf| grep 'net.ipv4.ip_forward = 0'

    开启转发功能:

    sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf

    

    在 iptables 中添加 NAT 转换规则:

    iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.1

    上面这条规则会将访问 80 端口的所有请求都转发给 192.168.1.1

    添加数据返回规则:

    iptables -t nat -I POSTROUTING -p tcp --dport 80 -j MASQUERADE

 

    这样请求就会被防火墙修改 ip 地址,而转发出去。

 

rinetd 实现

    阿里云的帮助文档里面提供了一种通过 rinetd 的方法(不过配置说明方面写的容易让人误会,我第一次就没看明白,还也为是注释),看名字就知道这是一款用来实现 nat 的,很简洁配置也方便,毕竟是专门用来做 nat 的。

    官网下载编译安装:

    wget http://www.boutell.com/rinetd/http/rinetd.tar.gz

    tar -xvf rinetd.tar.gz

    cd  rinetd && mkdir /usr/man && make && make install 

    不需要 configure 生成 Makefile。

    配置:

    vim /etc/rinetd.conf

    0.0.0.0  80  192.168.1.1 80

    0.0.0.0 代表源地址,可做限制

    80      请求的端口

    192.168.1.1     转发的目的地址

    80      目的端口

    全网请求在 80 端口的都会被 NAT 到 192.168.1.1 的 80 端口上。

    rinetd -c /etc/rinetd.conf

    启动 rinetd

 

Nginx 实现 NAT

    nginx 并没有围绕着传统的 nat 去实现转换,传统的 nat 只能满足一个 ip 一个端口的转发模式,但是如果有几个 ip 都希望得到同一个端口的转发呢?

    把转发从之前的 3 层和 4 层的 ip 加端口的映射提高到应用层来实现,通过域名的不同来转发至不同的 Ip,术语称为反向代理。

    nginx 是一款很好用的反向代理工具,配置文件向较与 apache 来说更好理解,关于代理还有很多软件,proxy 相关的模块很多。

    配置反向代理

    

    通过域名的不同,nginx 会把请求转发给 192.168.1.1 和 192.168.1.2 两个服务器,这样就实现了一个简单的域名转发功能。

    nginx 的请求都是由反向代理传递给后端服务器的,所有后端服务器获取的访问 ip 地址都是反向代理服务器的,想要获取真实的访问 ip,如果后端服务器也是 nginx ,那么就需要修改后端服务器的 nginx 日志格式:

   

    这样就可以在 access 日志中打印出访问的真实 IP 了。

     

    

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
诸葛孔明亮
粉丝 2
博文 64
码字总数 53931
作品 0
浦东
运维
私信 提问
在NAT模式下,如何让VMWare虚拟机的IP保持不变

采用 NAT 模式后,发现 guest 的 IP 经常变化,网上找到的解决办法如下: 来源:http://www.sudu.cn/info/html/edu/20070101/284852.html 1、VMware网络连接选择的是NAT方式。 2、VMware网络...

mj4738
2013/07/12
0
0
Neutron学习笔记1--基本概念

Neutron学习笔记 基本概念 1.涉及的Linux网络技术 bridge:网桥,Linux中用于表示一个能连接不同网络设备的虚拟设备,Linux中传统实现的网桥类似于一个hub设备,而ovs管理的网桥一般类似交换...

墨痕hz
06/07
0
0
Linux 之 使用iptables作为防火墙

上面左边是我的个人微信,如需进一步沟通,请加微信。 右边是我的公众号“Openstack私有云”,如有兴趣,请关注。 近期朋友一个防火墙故障,在紧急情况下,将外网专线插到一台linux服务器(红...

余伟兵
08/07
0
0
76.linux简介及安装详细介绍

1.简介 计算机组成 CPU 硬件RAM 硬件Disk 操作系统(OS) 管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件 任何其他软件都必须在操作系统的支持下才...

-Learning-
08/04
0
0
基于嵌入式Linux的SOHO路由器设计

http://tech.fuwuqi.com.cn/networkci/routswitch/2009-08-18/5057244114034.shtml 来源:维库 作者:佚名 发布时间:2009-08-18 13:14:01 发表评论 摘要:针对目前SOHO路由器设计方案难以满...

chulia
2009/09/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

手写tomcat+servlet

写程序一定要有思路,思路很重要! 一、我们分两步第一步先实现手写tomcat,第二部写servlet 所用技术: 1、soket通信 IO流 2、http请求与相应 3、解析xml 4、java反射技术 导入所需要的jar...

jason_kiss
28分钟前
1
0
Beetl模板的基础用法 【变量、循环、条件】---《Beetl视频课程》(2)

本期视频做了一个博客的首页列表; 内容简介:springboot 集成 beetlsql;使用for循环,使用if控制语句,使用虚拟属性,定义变量等等 一起学beetl目录:https://my.oschina.net/u/1590490?ta...

Gavin-King
33分钟前
1
0
各种视频监控上墙方案的比较

方案1、一使用 DVR 、NVR 直接显示上墙 不得不说,这种办法是成本最低廉的,但这里有不少限制: 无法实现分散点的集中上墙。譬如连锁经营的酒店,如果我在总部建立一个集中上墙的环境,这个就...

PeakFang-BOK
57分钟前
4
0
netfilter 和 iptables

一. netfilter 1. 什么是entfilter 和 iptables netfilter指整个项目名 在这个项目里面,netfilter特指内核中的netfilter框架, iptables指用户空间的配置工具。 netfilter在协议栈中添加了5...

Fc丶
今天
2
0
搞定了微信小程序富文本渲染解决方案-后端渲染方案Html2Wxml2J

先介绍一下最近遇到的问题: 最近小程序项目中有文章详情页需要渲染富文本,微信小程序官方提供的<rich-text>是个弱鸡,很多标签不支持,用起来也麻烦,性能也不咋地。 吐槽完了,我们决定寻...

山东-小木
今天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部