iptables NAT 学习

标签: iptables nat 学习 | 发表时间:2014-04-24 17:15 | 作者:xy.lin
出处:http://www.blogjava.net/

为了搞清楚iptables NAT的过程,做了这个实验。使用了1台双网卡服务器和1台单网卡服务器,2个网段。服务器信息如下:


IP配置信息如下:

服务器

操作系统

网卡

IP

调度服务器

Centos

eth0

192.168.18.58

eth1

192.168.2.90

实际服务器

Centos

eth0

192.168.2.73

 

1.       为了看到调度服务器上的数据转发过程,首先在调度服务器上分出内核的debug日志:

l 在/etc/rsyslog.conf最后增加:kern.debug /var/log/iptables.log

l 重启日志服务:/etc/init.d/rsyslog restart

 

2.       启动调度服务器的iptables并清空规则

service iptables start

iptables -F

 

3.       增加调度服务器的iptables特定日志输出

假设要将对调度服务器8888端口的访问转发给实际服务器的9999端口处理,在iptables中增加与这2个端口相关的日志输出:

iptables -t mangle -A PREROUTING -p tcp --dport 8888 -j LOG --log-level debug --log-prefix "<<<<< PER IN:"

iptables -t mangle -A PREROUTING -p tcp --sport 9999 -j LOG --log-level debug --log-prefix "<<<<< PER IN:"

iptables -t mangle -A POSTROUTING -p tcp --sport 8888 -j LOG --log-level debug --log-prefix ">>>>> POST OUT:"

iptables -t mangle -A POSTROUTING -p tcp --dport 9999 -j LOG --log-level debug --log-prefix ">>>>> POST OUT:"

iptables -t mangle -A POSTROUTING -p tcp --sport 9999 -j LOG --log-level debug --log-prefix ">>>>> POST OUT:"

 

这时,通过浏览器访问http://192.168.18.58:8888可以看到iptables.log中打印出下面的日志:

Apr 24 16:24:35 route-server1 kernel: <<<<< PER IN:IN=eth0 OUT= MAC=00:1f:c6:cb:eb:e0:00:1f:33:de:29:ad:08:00 SRC=192.168.18.25 DST=192.168.18.58 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=28721 DF PROTO=TCP SPT=50270 DPT=8888 WINDOW=14600 RES=0x00 SYN URGP=0

Apr 24 16:24:35 route-server1 kernel: <<<<< POST OUT:IN= OUT=eth0 SRC=192.168.18.58 DST=192.168.18.25 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=8888 DPT=50270 WINDOW=0 RES=0x00 ACK RST URGP=0

 

虽然这个端口上即没有应用,也没有将请求转发出去,但日志打印出了内核获取到的对这个端口的请求。

 

4.       配置iptables将对8888的请求转发到192.168.2.73:9999

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8888 -j DNAT --to-destination 192.168.2.73:9999

 

访问http://192.168.18.58:8888,日志中打印如下信息:

Apr 24 16:39:21 route-server1 kernel: <<<<< PER IN:IN=eth0 OUT= MAC=00:1f:c6:cb:eb:e0:00:1f:33:de:29:ad:08:00 SRC=192.168.18.25 DST=192.168.18.58 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=56888 DF PROTO=TCP SPT=50274 DPT=8888 WINDOW=14600 RES=0x00 SYN URGP=0

 

日志中只打印了从eth0收到的对8888端口的请求,这是因为当数据要被转发到192.168.2.73:9999时,默认情况下被禁止了。

 

5.       打开数据包转发功能

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

 

访问http://192.168.18.58:8888,日志中打印如下信息:

Apr 24 16:39:21 route-server1 kernel: <<<<< PER IN:IN=eth0 OUT= MAC=00:1f:c6:cb:eb:e0:00:1f:33:de:29:ad:08:00 SRC=192.168.18.25 DST=192.168.18.58 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=56888 DF PROTO=TCP SPT=50274 DPT=8888 WINDOW=14600 RES=0x00 SYN URGP=0

Apr 24 16:39:21 route-server1 kernel: <<<<< POST OUT:IN= OUT=eth1 SRC=192.168.18.25 DST=192.168.2.73 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=56888 DF PROTO=TCP SPT=50274 DPT=9999 WINDOW=14600 RES=0x00 SYN URGP=0

 

第一条日志显示从eth0收到了对8888端口的请求,第二条日志显示iptables已经更改了数据包的目的地为192.168.2.73:9999,并通过eth1发出去。

 

但这时请求虽然已经被转发到实际处理的服务器,但调度服务器收不到响应,浏览器仍在不停重试,日志也在不断打印。这是因为实际服务器收到的数据包的来源IP是另一个网段的,实际服务器回复时,发现不是本网段的就把数据包发给网关,网关设置的是192.168.2.1,这时数据就丢了。

 

6.       将实际服务器的默认网关设置为192.168.2.90

在实际服务器上执行以下命令:

route del default

route add default gw 192.168.2.90

 

再次访问http://192.168.18.58:8888,日志打印如下信息:

Apr 24 16:47:27 route-server1 kernel: <<<<< PER IN:IN=eth0 OUT= MAC=00:1f:c6:cb:eb:e0:00:1f:33:de:29:ad:08:00 SRC=192.168.18.25 DST=192.168.18.58 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=37000 DF PROTO=TCP SPT=50279 DPT=8888 WINDOW=14600 RES=0x00 SYN URGP=0

Apr 24 16:47:27 route-server1 kernel: <<<<< POST OUT:IN= OUT=eth1 SRC=192.168.18.25 DST=192.168.2.73 LEN=60 TOS=0x00 PREC=0x00 TTL=62 ID=37000 DF PROTO=TCP SPT=50279 DPT=9999 WINDOW=14600 RES=0x00 SYN URGP=0

Apr 24 16:47:27 route-server1 kernel: <<<<< PER IN:IN=eth1 OUT= MAC=00:22:b0:de:f7:49:00:24:8c:b4:a1:8c:08:00 SRC=192.168.2.73 DST=192.168.18.25 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=9999 DPT=50279 WINDOW=0 RES=0x00 ACK RST URGP=0

Apr 24 16:47:27 route-server1 kernel: <<<<< POST OUT:IN= OUT=eth0 SRC=192.168.2.73 DST=192.168.18.25 LEN=40 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=9999 DPT=50279 WINDOW=0 RES=0x00 ACK RST URGP=0

 

上面第一条第二条日志和之前一样,iptables将目地址更改后,通过eth1网卡发送出去。第三条日志通过eth1网卡接收到了实际服务器发送过来的数据,并在第四条日志中通过eth0发回请求方。

 



xy.lin 2014-04-24 17:15 发表评论

相关 [iptables nat 学习] 推荐:

iptables NAT 学习

- - BlogJava-首页技术区
为了搞清楚iptables NAT的过程,做了这个实验. 使用了1台双网卡服务器和1台单网卡服务器,2个网段. 1.       为了看到调度服务器上的数据转发过程,首先在调度服务器上分出内核的debug日志:. l 在/etc/rsyslog.conf最后增加:kern.debug /var/log/iptables.log.

[转]iptables防火墙与NAT服务

- - 小鸥的博客
iptables防火墙与NAT服务. (1)设置在不同的网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性. (2)通过审查经过每一个数据包,判断它是否有相匹配的过滤规则,根据规则先后顺序一一进行比较,直到满足其中的一条规则为止,然后依据控制机制做出相应的动作,若都不能满足,则将数据包丢弃,从而保护网络安全.

iptables 学习总结

- - 小火箭
参考文章: 朱双印 iptables. 主机防火墙:对单个主机进行防护. 网络防火墙:通常处于网络的入口/出口,服务于其背后的局域网. 硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高. 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低.

iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链

- - Linux - 操作系统 - ITeye博客
转自:http://lesca.me/archives/iptables-examples.html. 一、iptables:从这里开始. iptables的filter表中有三种链:INPUT, FORWARD和OUTPUT. 默认的链策略是ACCEPT,你可以将它们设置成DROP. #一般出站连接设置为ACEEPT,看需求.

Linux数据包路由原理、Iptables/netfilter入门学习 - .Little Hann

- - 博客园_首页
Iptables/Netfilter原理分析. Iptables/Netfilter原理分析. 在文章的最开头,我们首先要明确一个概念,Iptables/Netfilter到底是什么,它们之间的关系是怎样的. Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:. 1) 网络地址转换(Network Address Translate).

iptables 小结

- - CSDN博客系统运维推荐文章
        最近工作上一个作业用到了iptables命令,主要进行端口映射,在网上查了好多资料,尽管有很多例子,但还是整了好几天才整明白. (有一些是从网络中总结的,不断完善中...). (1) iptables简介.            iptables是一个Linux下优秀的nat+防火墙工具,iptables操作的是2.4以上内核的netfilter,所以需要linux的内核在2.4以上.

iptables 详解

- - 行业应用 - ITeye博客
以下文章转载于:http://blog.chinaunix.net/uid-26495963-id-3279216.html. 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种. 无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘. 而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测.

iptables原理说明

- - CSDN博客互联网推荐文章
1.iptables的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当中的,对数据包进行检测的一款简易访问控制工具. 2. 作者一共在内核空间中选择了5个位置,.     1).内核空间中:从一个网络接口进来,到另一个网络接口去的.     2).数据包从内核流入用户空间的.

nat穿透原理

- - 开源软件 - ITeye博客
一直以来,说起NAT穿透,很多人都会被告知使用UDP打孔这个技术,基本上没有人会告诉你如何使用TCP协议去穿透(甚至有的人会直接告诉你TCP协议是无法实现穿透的). 但是,众所周知的是,UDP是一个无连接的数据报协议,使用它就必须自己维护收发数据包的完整性,这常常会大大增加程序的复杂度,而且一些程序由于某些原因,必须使用TCP协议,这样就常常令一些开发TCP网络程序的人员“谈穿透色变”.

linux下IPTABLES配置详解

- - Linux - 操作系统 - ITeye博客
作者博客:http://www.cnblogs.com/JemBai/. 原文地址:http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html. 如果你的IPTABLES基础知识还不了解,建议先去看看. 我们来配置一个filter表的防火墙.