一:DNAT與SNAT講解及準備工作
SNAT:源地址轉(zhuǎn)換,代理內(nèi)部客戶端訪問外部網(wǎng)絡(luò)
目標地址不變,重新改寫源地址,并在本機建立NAT表項,當數(shù)據(jù)返回時,根據(jù)NAT表將目的地址數(shù)據(jù)改寫為數(shù)據(jù)發(fā)送出去時候的源地址,并發(fā)送給主機,目前基本都是解決內(nèi)網(wǎng)用戶用同一個公網(wǎng)IP地址上網(wǎng)的情況。
DNAT:目標地址轉(zhuǎn)換,將內(nèi)部服務(wù)器發(fā)布至外部網(wǎng)絡(luò)
和SNAT相反,源地址不變,重新修改目標地址,在本機建立NAT表項,當數(shù)據(jù)返回時,根據(jù)NAT表將源地址修改為數(shù)據(jù)發(fā)送過來時的目標地址,并發(fā)給遠程主機在DNAT的基礎(chǔ)上,可以根據(jù)請求數(shù)據(jù)包的端口做PNAT(端口轉(zhuǎn)換,也稱為端口映射),可以根據(jù)請求數(shù)據(jù)包不同的端口改寫不同的目標地址,從而發(fā)送給不同的主機這在用一個公網(wǎng)地址做不同服務(wù)時用的比較多,而且相對來說,用NAT的方式可以隱藏后端服務(wù)器的真實地址,比較安全。
SNAT的數(shù)據(jù)流向過程
首先進入PREROUTING,發(fā)現(xiàn)不是本網(wǎng)段的地址,而后開始查找路由表(查找路由的過程在PREROUTING和FORWARD之間),于是經(jīng)過FORWARD鏈進行轉(zhuǎn)發(fā),在通過POSTROUTING時進行NAT轉(zhuǎn)換。在這個流程中,NAT轉(zhuǎn)換的步驟在POSTROUTING鏈上實現(xiàn),之所以不再PREROUTING上做NAT是因為數(shù)據(jù)包在進來之前,還不知道是本網(wǎng)段地址還是外網(wǎng)地址。
DNAT的數(shù)據(jù)流向過程
在DNAT中,NAT要在PREROUTING鏈上做。在數(shù)據(jù)進入主機后,路由選擇過程是在PREROUTING和FORWARD之間的,所以應(yīng)該先做地址轉(zhuǎn)換之后再進行路由選擇,而后經(jīng)過FORWARD鏈,最后從POSTROUTING鏈出去。
這里三臺計算機都使用的VMware來實現(xiàn),172.16.的系統(tǒng)都是CentOS6.4_x86_64,192.168.是windows XP。
PC1地址:172.16.251.185 網(wǎng)關(guān)指向:172.16.251.186
route add default gw 172.16.251.186
NAT服務(wù)器地址:172.16.251.185
PC2地址:
二、SNAT的實現(xiàn):
1、在我們做NAT之前,首先要把NAT服務(wù)器的路由功能打開,不然數(shù)據(jù)包過不了FORWARD鏈
sysctl -w net.ipv4.ip_forward=1
也可以使用文件永久生效,下面值改為1即可
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
執(zhí)行如下命令讓其生效
sysctl -p
2、在NAT服務(wù)器添加iptables規(guī)則如:
iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j SNAT –to-source 192.168.254.61
//在POSTROUTING鏈上面,將來自源地址為172.16.0.0/16網(wǎng)段的數(shù)據(jù)包的源地址都轉(zhuǎn)換為192.168.254.61