Chinaunix首页 | 论坛 | 博客
  • 博客访问: 520190
  • 博文数量: 100
  • 博客积分: 2058
  • 博客等级: 大尉
  • 技术积分: 1029
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-14 23:29
文章分类
文章存档

2011年(94)

2010年(6)

分类:

2011-02-24 23:29:32

原文地址:Linux双网卡搭建NAT服务器 作者:Godbach

本文欢迎自由转载,但请标明出处和本文链接,并保持本文的完整性。
CU
Godbach
Blog
http://blog.chinaunix.net/u/33048/index.html
Jan 4, 2010

一、需求

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

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

二、环境

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

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

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

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

三、配置

(一)网络结构

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

因此, 首先介绍一下Linux系统主机的配置。Linux主机是可以直接通过eth0上外网的。eth0IP地址,GWDNS都是自动获取的。当然,如果是手动分配IPGWDNS也是没问题的。我的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段的IPeth1IP是所有内网主机的网关。这里,我的内网主机设置如下:

IP: 10.50.10.46/24

GW: 10.50.10.1

DNS:192.168.79.2

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

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

(二)启用转发功能

       以上配置完成后,Host A应该可以pingLinux系统主机的eth1IP,因为他们是通过交换机链接的。但是,Host A应该可以ping不通Linux系统主机的网关和DNS服务器,因为并未开启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。但是该内网IP192.168.79.129)已经通过一些机制,实际上同样是NAT的方式,可以访问外网了,因此我们只需将Host AIP转换成Linux系统eth0接口的IP即可)。

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

#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

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

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

#iptables -A FORWARD -i eth1 -j ACCEPT

保证所有进入eth1的包都被FORWARDACCEPT

 

经过以上的配置之后,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转换功能,访问外网了。

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

五、参考链接

1. http://blog.chinaunix.net/u/16255/showart_100254.html

2. http://panpan.blog.51cto.com/489034/189072

3.

4. iptablesSNATMASQUERADE的区别:

 

 

 

 

阅读(1350) | 评论(0) | 转发(0) |
0

上一篇:信号生命周期

下一篇:标准IO中的读函数

给主人留下些什么吧!~~