首先需要弄清楚snat與dnat的區別:
從定義來講它們一個是源地址轉換(snat),一個是目的地址轉換(dnat)。都是地址轉換的功能,將私有地址轉換爲公網地址。
要區分這兩個功能可以簡單的由連接發起者是誰來區分:
- SNAT:內部地址要訪問公網上的服務時(如web訪問),內部地址會主動發起連接,由路由器或者防火牆上的網關對內部地址做個地址轉換,將內部地址的私有IP轉換爲公網的公有IP,網關的這個地址轉換稱爲SNAT,主要用於內部共享IP訪問外部。
- DNAT:當內部需要提供對外服務時(如對外發布web網站),外部地址發起主動連接,由路由器或者防火牆上的網關接收這個連接,然後將連接轉換到內部,此過程是由帶有公網IP的網關替代內部服務來接收外部的連接,然後在內部做地址轉換,此轉換稱爲DNAT,主要用於內部服務對外發布。
在配置防火牆或者路由acl策略時要注意這兩個NAT一定不能混淆。
一、SNAT實驗:
實驗準備:
內部PC機(虛擬win10:192.168.200.100);網關服務器(centos7-2:ens-33:192.168.200.20與ens-36:12.0.0.1,注意需要提前再添加一張網卡ens-36,實現雙網卡);外部web服務器(centos7-1:12.0.0.12)
操作步驟:
首先我們需要更改一下網關服務器中ens-36網卡的IP地址(這裏我們可以將ens-33的網卡配置文件複製到ens-36中然後直接進行修改即可)
重啓網卡後查看一下是否更改成功。
然後在網關服務器中重啓iptables服務
然後將nat中的規則清除
在網關服務器中開啓路由轉發功能
使用sysctl -p 查看路由轉發功能是否開啓成功。
接下來準備web服務器,進入/etc/sysconfig/network-scripts/下更改ifcfg-ens33。更改IP地址與網關地址,並將DNS註釋掉。
更改完網卡後會與xshell斷開連接,那我們就直接在虛擬機中進行操作。
在7-1中檢查一下網卡是否更改成功。
然後將firewalld防火牆關閉
接下來掛載磁盤後,安裝httpd服務,並開啓。
接下來在虛擬win10上測試一下是否可以連接上web。
不過在此之前需要先修改一下win10的網卡。
使用ping 命令檢驗是否可以連通網關服務器與web服務器
同樣在虛擬win10中也可以連接上web服務器的網站
此時我們在web服務器中查看httpd的訪問日誌文件,發現是使用的客戶機自己的IP進行訪問的。
接下來就是進行SNAT的配置,將內部IP地址192.168.200.100更改爲公網IP地址12.0.0.1後進行web的訪問。
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o ens36 -j SNAT --to 12.0.0.1
指定nat表 指定鏈 內網IP網段 外網網卡 使用SNAT 轉換的外網IP
設置完以後在win10上再次訪問wen服務器
再次查看web服務器的httpd日誌,發現這次訪問的網址是12.0.0.1了,說明SNAT設置成功。
二、DNAT實驗
實驗準備:
內網web服務器 7-1(192.168.200.11);網關服務器 7-2(ens33:192.168.200.20;ens36:12.0.0.1);外網客戶端win10(12.0.0.0/24)
注意:配置DNAT,需要一起配置SNAT,因爲web服務器返回數據的時候也是需要將IP地址轉換之後進行回覆的。
我們繼續使用上面配置SNAT的虛擬機,所以首先需要將網關服務器上面的iptables規則清空。
然後重新確認一下是否開啓了路由轉發功能(=1即開啓)
將web服務器(7-1)的網卡進行更改。
最好在web服務器上再重啓一下httpd服務
在win10上更改一下網卡
然後就是進行DNAT和SNAT的配置了,其中DNAT配置命令爲:
iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.200.11
使用PREROUTING鏈 指定入站端口ens36 指定端口號80
SNAT配置命令爲:
iptables -t nat -A POSTROUTING -o ens36 -s 192.168.200.0/24 -j SNAT --to 12.0.0.1
接着查看一下規則是否配置成功
然後就可以在 win10 上訪問12.0.0.1進行web訪問了
而此時訪問後在web服務器的日誌中查看訪問日誌