Linux系统配置双网卡网络接口eth0和eth1,并在服务器上配置NAT(网络地址转换),在公网ip和内部网私有ip地址间配置静态NAT重定向数据包,使服务器成为透明网关从而使得内部网计算机可以无障碍访问外部互联网。
关键词:Redhat Linux;DNS(域名解析服务器);NAT(网络地址转换);iptables规则
步骤:
Step1配置两块网卡的接口地址
设置第一块网卡eth0的IP地址和子网掩码:
# ifconfig eth0 202.38.75.7 netmask 255.255.255.0 up
修改/etc/sysconfig/network-scripts/ifcfg-eth0文件的内容如下:
DEVICE=eth0
BOOTPROTO=none
BROADCAST=202.38.75.255
IPADDR=202.38.75.7
NETMASK=255.255.255.0
NETWORK=202.38.75.0
ONBOOT=yes
USERCTL=no
PEERDNS=no
TYPE=Ethernet
GATEWAY=202.38.75.254
设置第二块网卡eth1的IP地址和子网掩码:
# ifconfig eth0 192.18.75.209 netmask 255.255.255.0 up
修改/etc/sysconfig/network-scripts/ifcfg-eth0文件的内容如下:
DEVICE=eth1
BOOTPROTO=none
BROADCAST=192.168.75.223
IPADDR=192.168.75.209
NETMASK=255.255.255.240
NETWORK=192.168.75.0
ONBOOT=yes
USERCTL=no
PEERDNS=no
TYPE=Ethernet
Step2使用route命令设置路由表
设置第一块网卡eth0的路由表:
# route add -net 202.38.75.0 netmask 255.255.255.0 dev eth0
设置第二块网卡eth1的路由表:
# route add -net 192.168.75.0 netmask 255.255.255.0 dev eth1
使用route命令来观察路由情况:
# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
202.38.75.0 * 255.255.255.0 U 0 0 0 eth0
192.168.75.0 * 255.255.255.0 U 0 0 0 eth1
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
Step3配置DNS(Domain Name Sever域名解析服务器)服务器地址
配置主机使用的DNS服务器:编辑/etc/resolv.conf文件,内容为:nameserver 202.38.64.1,这指定了DNS服务器的地址。最多可以写三个地址,作为前一个失败时的候选DNS服务器。
#vi /etc/resolv.conf
nameserver 202.38.64.1
Step4重启并测试network服务
完成网络配置后,用下面命令重启network服务:
# service network restart
正在关闭接口 eth0: [确定]
在关闭接口 eth1: [确定]
关闭环回接口: [确定]
禁用 IPv4包转送: [确定]
设置网络参数: [确定]
弹出环回接口: [确定]
弹出界面 eth0: [确定]
弹出界面 eth1: [确定]
测试内网机器与服务器网络接口eth1:
在内网机器上ping服务器:
#ping 192.168.75.209
如果ping通,说明eth1网络接口没有问题。
测试服务器对外网络接口eth0:
在服务器上ping外部网络,比如DNS服务器ip地址:
#ping 202.38.64.1(科大的DNS服务器)
如果ping通,说明eth0网络接口以及DNS服务器设置没有问题。
Step5在服务器上配置NAT
使用NAT就可以转换数据包的源地址(SNAT)或者目的地址(DNAT)。
DNAT操作主要用在这样一种情况,你有一个合法的IP地址,要把对防火墙的访问重定向到其他的机子上。也就是说,我们改变的是目的地址,以使包能重路由到某台主机。
SNAT改变包的源地址,这在极大程度上可以隐藏你的本地网络等。一个很好的例子是我们知道防火墙的外部地址,但必须用这个地址替换本地网络地址。有了这个操作,防火墙就能自动地对包做SNAT和De-SNAT(就是反向的SNAT),以使LAN能连接到Internet。如果使用类似 192.168.0.0/24这样的地址,是不会从Internet得到任何回应的。因为IANA定义这些网络(还有其他的)为私有的,只能用于LAN内部。
我们这里的情况就属于SNAT的应用。因为内部网络使用192.168.75.0/24这样的私有ip,直接使用这类ip地址是无法访问外部Internet网络ip的(如202.38.75.7)。通过添加iptables路由规则,将来自内部局域网机器的数据包重定向,改变其源地址为服务器ip地址,才可以使内网机器顺利访问外部网络。从这个角度来看,服务器提供NAT服务后就像一个透明网关,使内外网机器无障碍连通。
设置方法如下:
在/etc路径下建立natstat脚本文件:
#vi /etc/natstat
内容设置为:
#!/bin/bash
#检查需要的模块是否正常工作
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/modprobe ip_tables
/sbin/modprobe ip_nat_ftp
/sbin/modprobe iptable_nat
#设置SNAT规则
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.75.0/24 -j SNAT --to-source 202.38.75.7
然后保存脚本文件,并设置natstat文件访问权限为“可执行”,并执行此脚本
#cd /etc
#chmod +x natstat
#./natstat
最后,在/etc/rc.local中添加开机自动启动NAT的脚本:
#vi /etc/rc.local(注:不同系统可能有所区别,可能是/etc/rc.d/rc.local,也可能是/etc/rc.conf)
在其中添加如下脚本:
/etc/natstat
保存文件,退出。
这样就在网关服务器上配置好了NAT服务,内网机器应该可以访问外部网络了。
在内网机器上尝试ping外网ip:
#ping 202.38.64.1(DNS服务器)
如能ping通,则说明设置成功。