Chinaunix首页 | 论坛 | 博客
  • 博客访问: 506099
  • 博文数量: 62
  • 博客积分: 2566
  • 博客等级: 少校
  • 技术积分: 520
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-10 12:52
文章分类

全部博文(62)

文章存档

2008年(2)

2007年(22)

2006年(38)

我的朋友

分类: BSD

2006-12-26 01:52:56

NAT—基于OpenBSD的网络地址转换
作者:Wayne Fergerstrom
翻译:mirnshi
时间:v1.01, December 1999

译者说明:
  1、本文未经作者授权翻译
  2、语句翻译上可能与原文有出入


NAT—基于OpenBSD的网络地址转换


++-------------------------+
|| 目  录                  |
++-------------------------+

1.0 说明
1.1 目的及责任
1.2 术语
1.3 配置
2.0 网络地址转换
     2.1 网络地址转换介绍
   2.2 为什么使用网络地址转换
   2.3 安装
   2.4 配置
   2.5 运行
3.0 网络地址转换的基本知识
3.1 检查NAT状态
3.2 NAT的局限性 (FTP)
3.3 Redirecting Traffic
3.4 网络地址转换与代理
4.0 常见问题
5.0 链接与参考
6.0 有关人员

 


++-------------------------+
|| 1.0 说明                |
++-------------------------+

|| 1.1 目的及责任
++---------------------------------
本文主要介绍如何在OpenBSD系统中安装配置网络地址转换—NAT。对于有着
UNIX, TCP/IP, 网络相关知识的用户来说,本文是值得一看的。这里假设用
户已安装并配置好了一台有二块网卡的机器,操作系统是OpenBSD,一块网卡
连接Internet,一块连接本地网。
作者不承担由本文可能导致的任何危险和任何责任。译者同样不承担由本文
(译文)可能导致的任何危险和任何责任。阅读本文已证明你已同意这个不承
诺及版权和分发协议。


|| 1.2 术语
++---------------------------------
本文所用到的约定都是简单明了的。
与本文有关的一些术语

"NAT"
网络地址转换( Network Address Translation )。


"ipnat"
IP网络地址转换( IP Network Address Translation )。 有时,可以和NAT
互换。然而,在本文中ipnat用于命令行方式。

"IPF"
IP过滤( IP Filter )。IP过滤是个监控程序。ipnat依赖于IPF。你可以在
你的机器上安装IP过滤,使其起到防火墙的作用。然而这已不在本文讨论的
范围内了。


|| 1.3 配置
++---------------------------------
操作系统: OpenBSD v2.5 i386

网卡
NetGear 10/100MB ("/dev/pn0")
连接外网
IP地址: 24.5.0.5
掩码: 255.255.255.0

NetGear 10/100MB ("/dev/pn1")
连接内网
IP地址: 192.168.1.1
掩码: 255.255.255.0

Cable Modem IP (ISP提供)
IP地址: 24.5.0.5
掩码: 255.255.255.0
网关: 24.5.0.1

局域网
局域网上的机器使用192.168.1.xxx网段地址。(xxx是机器地址). 操作系统
是Windows98,WindowsNT,OpenBSD和Linux。每台机器都连接到HUB上。我们

假设局域网上我们将用到的机器是192.168.1.40。


配置图

+-----+              +---------+         +----------+
| Hub |--------- pn1 |   NAT   | pn0 ----| Internet |
+-----+              +---------+         +----------+
  | |
  | +-- 客户机 A
  +---- 其它客户机 

      +-------------------------+
      |          图例         |
      +-------------------------+
      |  NIC pn0 - 24.5.0.5     |
      |  NIC pn1 - 192.168.1.1  |
      | 客户机 A - 192.168.1.40 |
      +-------------------------+

 


++---------------------------------+
|| 2.0 网络地址转换                |
++---------------------------------+


|| 2.1 NAT介绍
++---------------------------------
随着越来越多的商业转到了Internet上,越来越多的用户联入Internet,他们都

需要一个IP地址,公网IP地址的获取也变得越来越难了。解决的方法就是网络地

址转换—NAT。NAT非常简单,而且不需要为每个机器购买或租用IP地址就可以接

入Internet。如果你是个Linux用户,NAT就是你所熟悉的IP伪装。

一旦NAT正确地安装并运行,局域网上的用户就可以通过NAT以一个不同的IP地址

联入Internet。每台机器(透明)使用的这个地址是由你的ISP服务商提供给你的

NAT工作的方式惊人的简单。当一个局域网上的客户端想连接Internet上的一台

器时,它发出一个连接请求包(TCP包)。这个TCP包头是客户端的地址(如:
192.168.1.40)和被请求的主机地址(如:123.45.67.89)。NAT主机截取这个包并

客户端的地址(192.168.1.40)改成NAT主机的连接Internet的外网地址(如:24.
5.0.5)。
这就会欺骗被请求的主机认为实际上的联机来自NAT主机,而不是实际上的客户
端。
被请求的主机接着就会将请求响应发送给NAT。当NAT主机接收到请求后,马上将

的地址从它自己换成客户端地址并将这个包发给客户端。客户端对这些一无所知

这些欺骗性的Internet连接都是透明的。


NAT的例子:

客户端 ----------------- pn1 [ NAT ] pn0 ---------- Internet Host
192.168.1.40 --- 192.168.1.1 [ NAT ] 24.5.0.5 ----- 123.45.67.89

发出的TCP包                 发出的TCP包
源: 192.168.1.40  >>=== NAT ===>> 源: 24.5.0.5
目: 123.45.67.89                目: 123.45.67.89

接收的TCP包                 接收的TCP包
源: 123.45.67.89                  源: 123.45.67.89
目:   192.168.1.40 <<=== NAT ===<< 目: 24.5.0.5


|| 2.2 为什么使用NAT
++---------------------------------
当我的新住所有了一个Cable Modem时,我又有了另外一个问题,我如何联入
Internet与我的室友联系呢?这有几种选择:申请一个额外的IP地址;安装
一个代理服务器;安装一个NAT。

我为什么选择NAT,这有很多原因。首要一点是省钱。在我的住所里有二个室
友。他们每个人拥有的PC不止一台。而我自己就有三台。我的ISP只允许每户
三个IP地址。很显然我们不可能为每台机器都申请到地址。

每台机器使用一个内部独立的IP地址,通过使用NAT共用由ISP提供给我的那个

IP地址。费用将降下来了,对于我来说那只是个小费而已。

不要让我的这个例子混淆了你。NAT是非常强大的,它可以支持上百甚至上千
台计算机。在我的例子里它支持了大约20台。


|| 2.3 安装
++---------------------------------
为了能在你的OpenBSD上使用NAT,你要打开IPF和NAT。这些工作很简单。你需要

编辑如下的一些文件。

/etc/rc.conf (机器启动时启动服务)

ipfilter=YES
ipnat=YES

/etc/sysctl.conf

net.inet.ip.forwarding=1

更改完后,就可以配置NAT了。


|| 2.4 配置
++---------------------------------
第一步是配置IPF过滤规则文件(/etc/ipf.rules)。例子中我们将允许所有的数

流通过而不作任何检查。文件的内容应为:

pass in from any to any
pass out from any to any

NAT的配置文件(/etc/ipnat.rules)的语法很简单。与上面相对应,文件应包含

下行:

map pn0 192.168.1.0/24 -> 24.5.0.5/32 portmap tcp/udp 10000:20000
map pn0 192.168.1.0/24 -> 24.5.0.5/32

说明:

"map" - 告诉 ipnat 这行转换LAN和Internet的地址

"pn0" - 联入Internet的网卡名

"192.168.1.0/24" - IP地址和掩码 (掩码的格式是CIDR格式)。 意思是从
192.168.1.1 到 192.168.1.254 都被映射。如果你不喜欢CIDR格式,你可以

用/255.255.255.0代替/24

"24.5.0.5/32" - 局域网地址将被映射成的IP地址和掩码

"portmap tcp/udp 10000:20000" - 所有的tcp/udp包映射到10000到20000。


第二行除了最后一部分外与第一行一样。ipnat将映射除tcp/udp外的其它数据包
到这
个数据包请求的任一端口(用于ipnat传送未知的协议)。

好,一切就绪。


|| 2.5 运行
++---------------------------------
执行NAT也非常简单。配置完成后,有二种方式启动NAT。第一种(最好的方法)是
启动
你的OpenBSD机器。

如果你想从命令行启动ipnat,使用下面的命令:

# ipf -Fa -f /etc/ipf.rules -E
# ipnat -CF -f /etc/ipnat.rules

第一行是启动IPF(记住NAT依赖于IPF)。因此IPF必须在NAT之前启动。
-Fa 清除所有有效的配置
-f /etc/ipf.rules 指定ipf过滤规则文件
-E 启动IPF监控程序

第二行是启动NAT
-CF 清除并刷新NAT表内容
-f /etc/ipnat.rules 指定NAT规则文件

很简单吧!

注:如果你想NAT重新加载设置而又不想重新启动机器,只需要再执行第二条命
令。
设置就会刷新并重新加载。

 

++---------------------------------+
|| 3.0 NAT的基本知识               |
++---------------------------------+

|| 3.1 检查NAT状态
++---------------------------------
使用 -l 选项可以查看NAT或确信设置已生效。这个选项将列出所以的设置和当
前的
连接。

# ipnat -l
map pn0 192.168.1.0/24 -> 24.5.0.5/32 portmap tcp/udp 10000:20000
map pn0 192.168.1.0/24 -> 24.5.0.5/32

List of active sessions:
MAP 192.168.1.40  2473  <- -> 24.5.0.5  13463 [129.128.5.191 80]

头二行是ipnat从 /etc/ipnat.rules 中读取并使用的规则。下面的是当前NAT控
制的
连接。

"MAP 192.168.1.40  2473" - 局域网上正在使用NAT的机器及其所用的端口号


"<- ->" - 双向数据流

"24.5.0.5  13463" - 用于访问Internet的地址和端口

"129.128.5.191 80" - 被访问的IP地址和端口


|| 3.2 NAT的局限性 (FTP)
++---------------------------------
NAT有一些局限性。其中一个是FTP。当用户连接一个远程的FTP服务器时,FTP服
务器
将建立一个连接并传回一些信息。这需要一个空闲端口,而这个端口是不确定的
。对
于在局域网内的用户连接FTP服务器时就会有问题。当FTP服务器发送连接信息时
,就
会在一个不确定端口发送给外网网卡。NAT主机会收到这些信息数据,由于对未
知的
包没有映射,对于那个端口也没有映射,NAT将丢弃这些数据包,并不会转发。


解决的方法是将你的FTP客户端设置为被动方式(passive mode),告诉服务器你
要连接
的服务器和你要传送的数据。这样NAT就可以正确的处理你的连接了。


|| 3.3 数据流重定向
++---------------------------------
有时你可能需要为某个协议或端口重定向输入输出数据流。一个很好的例子是在
局域网
上有一台web服务器,外网要访问wen服务。除非你的NAT主机上运行着web服务,
否则外
面是不能访问到你的web服务的。为此我们可以在规则文件中使用NAT的 rdr 规
则,指
明重定向。

例如:假设这台web服务器在局域网上,IP地址是192.168.1.80。可以在规则文
件中
增加下面一行:

rdr pn0 0.0.0.0/0 port 80 -> 192.168.1.80 port 80

说明:

"rdr" - 这一条表示重定向规则

"pn0" - 连接Internet的网卡名

"0.0.0.0/0" - 可以通过 pn0 的地址及其掩码

"port 80" - 被重定向的端口。你也可以用 port www 代替 port 80。如果
你想用名字代替数字,在 /etc/services 中名字要与相应的端口相对应

"192.168.1.80" - 局域网的服务器地址,这台机器的数据包将被重定向。
掩码应该总为 /32,因此这不是必须的。/32代表一台机器。

重新加载配置,重定向会立即生效


|| 3.4 NAT与代理
++---------------------------------
NAT和代理的区别是代理是Internet和局域网的中间人。这是好,但是每个通过
代理
连接到Internet上的程序必须知道(可以设定)这个代理。并不是所有的程序都可
以做
到这点(尤其是游戏)。NAT这个中间人是透明的。很多情况下这是首选,但在某
些情
况下会有问题。主要是FTP (参见NAT的局限性).


|| 3.4 内核配置
++---------------------------------
很快就会有的...


|| 4.0 常见问题
++---------------------------------
Q: CIDR的 "/24" 是如何表示 255.255.255.0 的?
A: 一个IP地址是一个32bit位数字。掩码用于识别这个地址范围内的网段和主机

   /24 表示这个IP地址的前24bit是网段,后8bit表示主机地址。下面是一些约
定:
   
   /32 = 255.255.255.255
   /24 = 255.255.255.0
   /16 = 255.255.0.0
   /8  = 255.0.0.0

   欲想了解更详细的信息,可以查看:


|| 5.0 连接和参考
++---------------------------------
OpenBSD 文件:
/etc/ipnat.rules - NAT 规则文件
/etc/rc.conf - 机器启动时的启动服务文件
/etc/sysctl.conf - 打开IP转发
/usr/share/ipf/nat.1 - ipnat.rules样本文件

NAT Internet 链接:




|| 6.0 有关人员
++---------------------------------
作者 (please send additions here):
Wayne Fergerstrom <>
Methadonia Networks <>

阅读(2773) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~