登录模块加载中...
会员投稿 投稿指南 今天是:
打印本页 | 关闭窗口 | 双击滚屏 您的位置首页>>网页制作学习园地>>服务器类>>防火墙和路由>>防火墙软件Netfilter之NAT技术
防火墙软件Netfilter之NAT技术
来源: ‖ 作者: ‖ 点击: ‖ 时间:08-03-03 09:57:35 ‖ 【 】‖ 我要投稿

本文档主要描述怎样进行IP伪装(masquerading)、透明代理(transparent proxying)、端口转发(port forwarding)和其他形式的网络地址翻译技术。

1. 什么是网络地址翻译NAT(Network Address Translation)?

当一个包在网络上传输时,从它的源地址(例如你自己的主机)到达目的地址(例如www.yahoo.com),中间经过很多节点和网络。这些节点通常不会改变你的包。他们仅仅转发你的包。

如果一个节点执行NAT,他将会修改包的源或目的地址。通常这个节点会记住他怎样修改了这个包,因此当相应的应答包从另一个方向到达时,他知道如何反向修改这个应答包。

2. 为什么要使用NAT?

l 用modem上网

大多数的ISPs只给你提供一个IP地址。你可以以任何源地址发出包,但是只有包含这个IP地址的包的应答包才会到达你的网络。如果你想使用多台机器(比如有个自己的网络)利用这个IP地址上网。需要NAT。

这是NAT使用得最为常见的情况,在linux的世界里称为IP伪装(masquerading)。又称之为SNAT,因为你要改变包的源地址。

l Multiple Servers

有时候你想改变到达你的网络的包的去向。通常因为你只有一个IP地址,但是你又想用户到达这个真实IP地址之后的各个机器。方法是修改这些包的目的地址,让他们到达不同的机器。

还有就是用于负载均衡。这种类型的NAT在linux上叫做端口转发(port-forwarding)。

l Transparent Proxying(透明代理)

透明代理是在你的网络和外部世界之间的程序,所有的进或出都要经过这个代理。之所以叫做“透明”,因为你的网络无需考虑他的存在。

例如,squid软件能够配置为透明代理。

3. 两种类型的NAT

NAT有两种类型:Source NAT(SNAT)和Destination NAT(DNAT)。

源NAT是指改变连接的第一个包的源地址。他是在路由之后做,即在包到达网线之前处理。IP伪装属于源NAT。

目的NAT是指改变连接的第一个包的目的地址。他是在路由之前做。端口转发、负载均衡、透明代理都属于目的NAT。

4. 仅仅需要IP伪装

这是大多数用户的要求。如果你有一个动态分配IP地址的PPP拨号连接,你仅仅想让你的内部网络发出的包发生改变,就像是从这个PPP拨号所分配的IP地址所发出的。如下:

# Load the NAT module (this pulls in all the others).
modprobe iptable_nat

# In the NAT table (-t nat), Append a rule (-A) after routing
# (POSTROUTING) for all packets going out ppp0 (-o ppp0) which says to
# MASQUERADE the connection (-j MASQUERADE).
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# Turn on IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
这里假设你没有做包过滤。

5. 端口转发

例如,要将1.2.3.4:8080变为192.168.1.1:80:

# Append a rule pre-routing (-A PREROUTING) to the NAT table (-t nat) that
# TCP packets (-p tcp) going to 1.2.3.4 (-d 1.2.3.4) port 8080 (--dport 8080)
# have their destination mapped (-j DNAT) to 192.168.1.1, port 80
# (--to 192.168.1.1:80).
iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 8080
-j DNAT --to 192.168.1.1:80
如果想让本地网络的机器适用于上面的规则,例如,本地机telnet 1.2.3.4 8080,就转变为telnet 192.168.1.1 80。可以在OUTPUT chain中插入规则:

iptables -A OUTPUT -t nat -p tcp -d 1.2.3.4 --dport 8080
-j DNAT --to 192.168.1.1:80

6. 控制NAT

你可以创建NAT规则来告诉内核改变哪些连接,以及怎么改变。同样,我们使用iptables工

|<< << < 1 2 3 > >> >>|
加入收藏:  加入收藏夹  | 发送给好友:  发送给好友
责任编辑:admin
相关文章列表
无相关新闻
请文明参与讨论,禁止漫骂攻击。  
网友评论