思路:配置雙網(wǎng)卡網(wǎng)絡(luò)接口eth0和eth1,并在服務(wù)器上配置NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換),在公網(wǎng)ip和內(nèi)部網(wǎng)私有ip地址間配置靜態(tài)NAT重定向數(shù)據(jù)包,使服務(wù)器成為透明網(wǎng)關(guān)從而使得內(nèi)部網(wǎng)計(jì)算機(jī)可以無障礙訪問外部互聯(lián)網(wǎng)。
關(guān)鍵詞:Redhat Linux;DNS(域名解析服務(wù)器);NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換);iptables規(guī)則
步驟:
Step1 配置兩塊網(wǎng)卡的接口地址
設(shè)置第一塊網(wǎng)卡eth0的IP地址和子網(wǎng)掩碼:
# ifconfig eth0 202.38.75.7 netmask 255.255.255.0 up
修改/etc/sysconfig/network-scripts/ifcfg-eth0文件的內(nèi)容如下:
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
設(shè)置第二塊網(wǎng)卡eth1的IP地址和子網(wǎng)掩碼:
# ifconfig eth0 192.18.75.209 netmask 255.255.255.0 up
修改/etc/sysconfig/network-scripts/ifcfg-eth0文件的內(nèi)容如下:
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命令設(shè)置路由表
設(shè)置第一塊網(wǎng)卡eth0的路由表:
# route add -net 202.38.75.0 netmask 255.255.255.0 dev eth0
設(shè)置第二塊網(wǎng)卡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 域名解析服務(wù)器)服務(wù)器地址
配置主機(jī)使用的DNS服務(wù)器:編輯/etc/resolv.conf文件,內(nèi)容為:nameserver 202.38.64.1,這指定了DNS服務(wù)器的地址。最多可以寫三個地址,作為前一個失敗時的候選DNS服務(wù)器。
#vi /etc/resolv.conf
nameserver 202.38.64.1
Step4 重啟并測試network服務(wù)
完成網(wǎng)絡(luò)配置后,用下面命令重啟network服務(wù):
# service network restart
正在關(guān)閉接口 eth0: [確定]
正在關(guān)閉接口 eth1: [確定]
關(guān)閉環(huán)回接口: [確定]
禁用 IPv4 包轉(zhuǎn)送: [確定]
設(shè)置網(wǎng)絡(luò)參數(shù): [確定]
彈出環(huán)回接口: [確定]
彈出界面 eth0: [確定]
彈出界面 eth1: [確定]
測試內(nèi)網(wǎng)機(jī)器與服務(wù)器網(wǎng)絡(luò)接口eth1:
在內(nèi)網(wǎng)機(jī)器上ping服務(wù)器:
#ping 192.168.75.209
如果ping通,說明eth1網(wǎng)絡(luò)接口沒有問題。
測試服務(wù)器對外網(wǎng)絡(luò)接口eth0:
在服務(wù)器上ping外部網(wǎng)絡(luò),比如DNS服務(wù)器ip地址:
#ping 202.38.64.1 (科大的DNS服務(wù)器)
如果ping通,說明eth0網(wǎng)絡(luò)接口以及DNS服務(wù)器設(shè)置沒有問題。
Step5 在服務(wù)器上配置NAT
使用NAT就可以轉(zhuǎn)換數(shù)據(jù)包的源地址(SNAT)或者目的地址(DNAT)。
DNAT操作主要用在這樣一種情況,你有一個合法的IP地址,要把對防火墻的訪問重定向到其他的機(jī)子上。也就是說,我們改變的是目的地址,以使包能重路由到某臺主機(jī)。
SNAT改變包的源地址,這在極大程度上可以隱藏你的本地網(wǎng)絡(luò)等。一個很好的例子是我們知道防火墻的外部地址,但必須用這個地址替換本地網(wǎng)絡(luò)地址。有了這個操作,防火墻就能自動地對包做SNAT和De-SNAT(就是反向的SNAT),以使LAN能連接到Internet。如果使用類似 192.168.0.0/24這樣的地址,是不會從Internet得到任何回應(yīng)的。因?yàn)?/span>IANA定義這些網(wǎng)絡(luò)(還有其他的)為私有的,只能用于LAN內(nèi)部。
我們這里的情況就屬于SNAT的應(yīng)用。因?yàn)閮?nèi)部網(wǎng)絡(luò)使用192.168.75.0/24這樣的私有ip,直接使用這類ip地址是無法訪問外部Internet網(wǎng)絡(luò)ip的(如202.38.75.7)。通過添加iptables路由規(guī)則,將來自內(nèi)部局域網(wǎng)機(jī)器的數(shù)據(jù)包重定向,改變其源地址為服務(wù)器ip地址,才可以使內(nèi)網(wǎng)機(jī)器順利訪問外部網(wǎng)絡(luò)。從這個角度來看,服務(wù)器提供NAT服務(wù)后就像一個透明網(wǎng)關(guān),使內(nèi)外網(wǎng)機(jī)器無障礙連通。
設(shè)置方法如下:
在/etc 路徑下建立natstat腳本文件:
#vi /etc/natstat
內(nèi)容設(shè)置為:
#!/bin/bash
#檢查需要的模塊是否正常工作
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/modprobe ip_tables
/sbin/modprobe ip_nat_ftp
/sbin/modprobe iptable_nat
#設(shè)置SNAT規(guī)則
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.75.0/24 -j SNAT --to-source 202.38.75.7
然后保存腳本文件,并設(shè)置natstat文件訪問權(quán)限為“可執(zhí)行”,并執(zhí)行此腳本
#cd /etc
#chmod +x natstat
#./natstat
最后,在/etc/rc.local中添加開機(jī)自動啟動NAT的腳本:
#vi /etc/rc.local (注:不同系統(tǒng)可能有所區(qū)別,可能是/etc/rc.d/rc.local,也可能是/etc/rc.conf)
在其中添加如下腳本:
/etc/natstat
保存文件,退出。
這樣就在網(wǎng)關(guān)服務(wù)器上配置好了NAT服務(wù),內(nèi)網(wǎng)機(jī)器應(yīng)該可以訪問外部網(wǎng)絡(luò)了。
在內(nèi)網(wǎng)機(jī)器上嘗試ping外網(wǎng)ip:
#ping 202.38.64.1 (DNS服務(wù)器)
如能ping通,則說明設(shè)置成功。