文/陶然 白睿
随着校园网多出口的出现,NAT是必不可少的设备,本文介绍如何将Linux配置成NAT:
本文在CentOS 5上进行配置,主要有以下几个步骤:
1. 打开Linux的IPv4转发,修改/etc/sysctl.conf文件,将
net.ipv4.ip_forward = 0
改成
net.ipv4.ip_forward = 1
2. 修改/etc/sysconfig/iptables文件,内容如下:
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth1 -m state --state NEW -j SAME --to 1.1.1.1-1.1.1.10
--nodst
COMMIT
-o eth1表示从eth1出去新建的连接进行转换,地址从1.1.1.1-1.1.1.10中根据哈希算法进行选择。
-j SAME 表示对去往同一个目的地址转换成同一个IP地址。
--nodst 在选择原地址时,目的地址不参与散列运算。这样设置后,每个用户访问所有网站都转换成同一个地址。
3. 修改/etc/modprobe.conf增加:
options ip_conntrack hashsize=100000
这样修改后,系统最大连接数就变成80万。
4. 为NAT增加日志功能
安装conntrack-tools工具,conntrack-tools是Linux下不同主机之间同步conntrack表的一个用户空间运行的程序,可以实现有状态防火墙之间的状态同步,实现防火墙的HA。通过conntrack-tools及syslog可以实现NAT的log功能。
(1)安装conntrack-tools工具
/etc/yum.repo.d目录增加CentALT.repo,内容如下:
[CentALT]
name=CentALT Packages for Enterprise Linux 5 - $basearch
baseurl=http://centos.alt.ru/repository/centos/5/$basearch/
enabled=1
gpgcheck=0
运行如下命令:
yum install conntrack-tools
(2)新增/usr/local/bin/conn-to-syslog,其内容为:
#!/usr/bin/perl -w
# Usage: conntrack -E -p tcp --state ESTABLISHED -j | conn-to-syslog
#by wzk@neu 2011
use Sys::Syslog;
$log_ident="NAT";
$log_opt="pid,cons";
$log_facility="local3";
openlog$log_ident,$log_opt,$log_facility;
while (
syslog ('notice', "%s", $_);
#syslog ('err', "Test Error Log Entry: %s", $_);
#syslog ('debug', "Test Debug Log Entry: %s", $_);
}
closelog();
为程序增加执行权限:
chmod +x /usr/local/bin/conn-to-syslog
(3)修改/etc/syslog.conf文件,增加红色部分内容
*.info;mail.none;authpriv.none;cron.none;local3.none /var/log/messages
local3.* -/var/log/nat.log
注意配置文件中的facility与conn-to-syslog一致,这里使用的是local3,完毕后重启syslogd服务。
5. 启动conntrack程序,可以写到rc.local中:
/usr/sbin/conntrack -b 1048576 -E -p tcp --state ESTABLISHED -j | /usr/local/bin/conn-to-syslog &
本例将状态为ESTABLISHED的TCP连接记录到日志中,大家可以根据man conntrack来调整相应的参数,可以实现TCP、UDP都记录下来,记录与/proc/net/ip_conntrack内容格式一致。
经过以上配置后,重新启动机器即可实现NAT及日志功能。