QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1638|回复: 10

[b]请教一下关于RedHat9.0的NAT转换问题[/b]

[复制链接]
发表于 2005-6-27 15:19:45 | 显示全部楼层 |阅读模式
我在网上看到很多关于NAT转换的文章,其中关于大多数都是修改iptables或者直接运行编写的脚本,或者用一些命令。我也看了一些书上关于NAT转换的做法。但由于我对linux的基本操作不熟练所以很久都没彻底成功,所以想求教一下高手。
对于各种办法我都尝试了,都能成功,但是却都在重启系统后都无效了。
我按书上写的保存了iptables文件,也在ntsysv中把iptables设成了自动启动,但还是在重启之后无效。不知道怎样能让NAT自动生效。还有在机器通电后让系统让NAT自动运行。
还有我希望高手提供我一个iptables文件作为参考,里面一些句子我实在看不太懂。
请高手赐教,谢谢。
发表于 2005-6-27 19:54:02 | 显示全部楼层

老菜鸟的经验

我用RH9.0,为了测试linux的iptables,安装了vmware4.5,跑win2000pro。vmware使用host-only模式。
我是用有线通宽带,有线通使用DHCP协议,一段时间内(DHCP租期)IP固定。既eth0的IP为221.137.208.84。
vmware会虚拟一个网卡vmnet1,接内网
内网192.168.23.0/24 ,网关linux(vmnet1):192.168.23.1 ,客户机win2000:192.168.23.22 。
(偶太穷啦,实在没钱买一台二手的PC,只好用vmware虚拟局域网
以下是我的iptables脚本文件
# Turn on IP forwarding
echo "1" >/proc/sys/net/ipv4/ip_forward

# Disable response to broadcasts.
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Load connection-tracking modules  and NAT modules
/sbin/depmod -a
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp

# Clean old iptables  rules
iptables -F -t filter
iptables -F -t nat

#Do NAT
iptables -t nat -A PREROUTING -d 221.137.208.84 -j DNAT --to-destination 192.168.23.22
iptables -t nat -A POSTROUTING -s 192.168.23.22 -j SNAT --to-source 221.137.208.84

#Forward chain Rules
# Default forward policy to ACCEPT
iptables -t filter -P FORWARD ACCEPT
# Make sure that new TCP connections from outside are all droped
iptables -A FORWARD -s 0/0 -d 192.168.23.22 -p tcp --syn -j DROP
#state conntrack
iptables -A FORWARD -s 0/0 -d 192.168.23.22 -p tcp -m state --state INVALID,NEW -j DROP
iptables -A FORWARD -s 0/0 -d 192.168.23.22 -p udp -m state --state INVALId,NEW -j DROP

# INPUT chain Rules
iptables -A INPUT -p tcp --destination-port 6000:6010 -j DROP  
iptables -A INPUT -p tcp --destination-port 139 -j DROP ! -i vmnet1
iptables -A INPUT -p tcp --destination-port 7070 -j DROP ! -i vmnet1
iptables -A INPUT -p tcp --destination-port 8080 -j DROP ! -i vmnet1
iptables -A INPUT -p tcp --destination-port 9090 -j DROP ! -i vmnet1
iptables -A INPUT -p tcp --destination-port 10903 -j DROP ! -i vmnet1
iptables -A INPUT -p icmp -j DROP -f
回复

使用道具 举报

发表于 2005-6-27 20:25:31 | 显示全部楼层
用DHCP协议,下次开机IP也可能变的。(两次开机间隔时间超过DHCP租期)
实现NAT, 可以用一下语句:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
从而代替:
iptables -t nat -A PREROUTING -d 221.137.208.84 -j DNAT --to-destination 192.168.23.22
iptables -t nat -A POSTROUTING -s 192.168.23.22 -j SNAT --to-source 221.137.208.84
回复

使用道具 举报

 楼主| 发表于 2005-6-27 20:47:26 | 显示全部楼层
谢谢了。
不过怎么让 NAT 功能在开机时自动启动呢?
我做的几种尝试都没有成功,不管是保存iptables还是ntsysv中选定,或者在服务里选定。还请高手帮助一下。
还有因为我把NAT 和 DHCP 服务开在一个服务器上了,不知它们之间有什么注意的吗?
现在DHCP服务正常,就是NAT转换不太正常。(我有固定IP,而且是用三台计算机和两个交换机试验的)
回复

使用道具 举报

发表于 2005-6-27 21:11:46 | 显示全部楼层
iptables的脚本文件中,只要NAT的语句正确,并且打开了内核的数据转发功能。
linux开机时,iptables启动,nat就随之生效了!
把你的配置文件贴出来看看,可能你的iptables脚本文件中NAT的语句不正确。
回复

使用道具 举报

 楼主| 发表于 2005-6-28 08:54:15 | 显示全部楼层
我的操作如下:
[root]# ifconfig eth0 21#.14#.#.2# netmask 255.255.255.0
[root]# ifconfig eth1 192.168.1.254 netmask 255.255.255.0
[root]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root]# echo "1" > /proc/sys/net/ipv4/tcp_syncookies

[root]# iptables -t nat -F PREROUTING
[root]# iptables -t nat -P PREROUTING ACCEPT
[root]# iptables -t nat -F POSTROUTING
[root]# iptables -t nat -P POSTROUTING ACCEPT
[root]# iptables -t nat -F OUTPUT
[root]# iptables -t nat -P OUTPUT ACCEPT
[root]# iptables -F INPUT
[root]# iptables -P INPUT ACCEPT
[root]# iptables -F OUTPUT
[root]# iptables -P OUTPUT ACCEPT
[root]# iptables -F FORWARD
[root]# iptables -P FORWARD ACCEPT

[root]# iptables -t nat -A PREROUTING -d 21#.14#.#.2# -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1
[root]# iptables -t nat -A PREROUTING -d 21#.14#.#.2# -p udp --dport 53 -j DNAT --to-destination 192.168.1.1

[root]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 21#.14#.#.2#
[root]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.1.1

然后保存

[root]# /etc/rc.d/init.d/iptables save

这样行吗?
回复

使用道具 举报

 楼主| 发表于 2005-6-28 09:01:11 | 显示全部楼层
我还这样做过:
1、修改/etc/sysctl.sys文件内容,“net.ipv4_forward=1”
2、echo 1 > /proc/sys/net/ipv4/ip_forward
3、/etc/rc.d/init.d/xinetd reload
4、iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o eth0 -j SNAT --to- 211.xx.xx.xx
5、iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o eth0 -j MASQUERADE
6、然后进行IP伪装(当然这个可以不要)……
7、保存 /etc/rc.d/init.d/iptables save
回复

使用道具 举报

 楼主| 发表于 2005-6-28 09:02:08 | 显示全部楼层
这么做都成功过,但是一重启就完了
回复

使用道具 举报

发表于 2005-6-29 06:39:22 | 显示全部楼层
echo "1 "> /proc/sys/net/ipv4/ip_forward 这句话不会被iptables保存的,下次开机自然就无效了。
要使每次开机,linux内核自动打开数据包转发功能,要在文件/etc/rc.d/rc.local 中把
echo "1" > /proc/sys/net/ipv4/ip_forward 添加进去。
回复

使用道具 举报

发表于 2005-6-29 08:36:51 | 显示全部楼层
我在SUSE下直接是用它的防火墙的转发设置
虽然说还是用的IPTABLE
不过用YAST设置简单多了.....
回复

使用道具 举报

发表于 2005-6-30 20:23:52 | 显示全部楼层
iptables出了补丁,不知哪位大哥升级过iptables(包括重新编译内核),希望能介绍介绍经验!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 19:01 , Processed in 0.045556 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表