Linux双网卡搭建NAT服务器

Linux双网卡搭建NAT服务器
Linux双网卡搭建NAT服务器

Linux双网卡搭建NAT服务器

本文欢迎自由转载,但请标明出处和本文链接,并保持本文的完整性。

Blog:https://www.360docs.net/doc/351710662.html,/jiaocheng

Jan 4, 2010

一、需求

学习Linux网络部分,关键还是在理解的基础上实践。要实践,就要准备好自己的环境。

譬如,我是想写一个小程序,实现一个hook函数,在FORWARD点上对来往的数据包进行监控和过滤等功能。那么,所需的环境见第二部分介绍。

二、环境

要实现这个功能,个人准备的环境如下:

(1)一个Linux系统主机,双网卡,实现转发功能。其中网卡eth0可以上外网,eth1链接内网。

(2)一个内网客户端主机,Linux/Windows都行;

(3)一个交换机,用于实现内网客户主机和Linux主机的通信。

三、配置

(一)网络结构

由第二部分介绍的环境可以看出,Linux系统主机主要是实现转发功能,让内网主机可以成功的访问外网。

因此,首先介绍一下Linux系统主机的配置。Linux主机是可以直接通过eth0上外网的。eth0的IP地址,GW和DNS都是自动获取的。当然,如果是手动分配IP、GW和DNS也是没问题的。我的eth0配置如下:

IP: 192.168.79.129/24

GW: 192.168.79.1

DNS:192.168.79.2

Linux主机的eth1指向内网,IP地址为:10.50.10.1/24。内网主机的内网主机的IP地址就

是10.50.10.0/24段的IP,eth1的IP是所有内网主机的网关。这里,我的内网主机设置如下:

IP: 10.50.10.46/24

GW: 10.50.10.1

DNS:192.168.79.2

这里,所有内网主机的网关都设置为eth1的IP地址,而DNS设置为eth1所在的Linux 系统主机的DNS,即192.168.79.2。

以上配置对应的网络结构图如下所示:

screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt=…Click here to open new window\nCTRL+Mouse wheel to zoom in/out?;}” onmouseover=“if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor=…hand?; this.alt=…Click here to open new window\nCTRL+Mouse wheel to zoom in/out?;}” onclick=“if(!this.resized) {return true;} else {window.open(…https://www.360docs.net/doc/351710662.html,?);}” onmousewheel=“return imgzoom(this);” alt=““ />

(二)启用转发功能

以上配置完成后,Host A应该可以ping通Linux系统主机的eth1的IP,因为他们是通过交换机链接的。但是,Host A应该可以ping不通Linux系统主机的eth0的IP,应为并未开启Linux系统主机的转发功能。

开启Linux的转发功能,执行如下命令:

# echo 1 > /proc/sys/net/ipv4/ip_forward

查看系统是否启用了转发功能,可以执行如下命令:

# cat /proc/sys/net/ipv4/ip_forward

如果结果为1,代表已启用,0代表未启用。

此时,执行ping 192.168.72.129 以及其网关和DNS都可ping通了。

(三)配置NAT规则

经过第二部分配置后,虽然可以ping相关的IP地址,但是内网主机还是无法上网。问题在于内网主机的IP地址是无法在公网上路由的。因此,需要转换成Linux系统主机可以上网的IP(注:这里我们只说不说是公网IP,是因为Linux系统可以直接上外网的IP同样是内网IP。但是该内网IP(192.168.79.129)已经通过一些机制,实际上同样是NAT的方式,可以访问外网了,因此我们只需将Host A的IP转换成Linux系统eth0接口的IP即可)。

我们配置的NAT为源NA T转换:

#iptables -t nat -A POSTROUTING -s 10.50.10.0/24

-o eth0 -j MASQUERADE

也可以通过使用SNAT target实现:

#iptables -t nat -A POSTROUTING -s 10.50.10.0/24

-o eth0 -j SNAT --to-source 192.168.79.129

至于MASQUERADE和SNAT的区别,可以网上搜索,有相关的解释。

同时,还要在FORW ARD点出配置规则如下:

#iptables -A FORWARD -i eth1 -j ACCEPT

保证所有进入eth1的包都被FORW ARD点ACCEPT。

经过以上的配置之后,Host A就可以正常的访问外网了。

四、如果只有一台主机...

按照上面介绍的环境,逻辑上需要两台主机方可实现。如果我只有一台电脑的话,如何实现搭建NAT服务器,并且通过内网主机访问外网来验证配置的结果呢?

很明显,虚拟机给我们提供的解决方案。不过仍然需要两个前提:其一,电脑双网卡;其二,有一个交换机。

说一些我自己的环境,一台笔记本,普通网卡+无线网卡,一个交换机。本身笔记本上安装的是Windows操作系统。上网使用无线网卡,DHCP获得IP,网关和DNS。但是这个系

统仅作为宿主机,Linux和内网主机都安装使用虚拟机操作系统。

(1)Linux系统主机

安装一个Linux系统的虚拟机,两张网卡都启用,其中对应无线网卡的是eth0,采用的上网方式是VMnet8(nat),其实相当于VMware实现了DHCP服务器,将Linux虚拟系统的eth0通过宿主机的无线网卡上网。这就是eth0可以上网的原因。但是我们可以不用关心eth0如何上网的,只要eth0可以上网,我们就可以开始搭建NAT服务器的配置了。

eth1对应普通网卡,IP地址的配置参考上面的拓扑图即可。

(2)内网主机

安装一个Windows操作系统的虚拟机,仅启用一张网卡,对应于宿主机的普通网卡。这样,内网主机上网就只能通过该网卡实现。该网卡的配置同样参考上面的拓扑图。

这样,我就可以在一台电脑上,使用内网主机,通过Linux主机的NAT转换功能,访问外网了。

因此,按照这种方式实现之后,想在Linux的FORW ARD点验证你的想法,加一个hook 函数就可以了。

五、致谢

谢谢大家观看

相关主题
相关文档
最新文档