SNAT和DNAT原理與應用
一、 SNAT原理的應用
1.1 原因環境和原理
SNAT 應用環境∶區域網主機共享單個公網IP地址接入Internet (私有IP不能在Internet中正常路由)
SNAT原理∶修改資料包的源地址。 SNAT轉換前提條件∶
區域網各主機已正確設定IP地址、子網掩碼、預設閘道器地址
Linux閘道器開啟IP路由轉發
1.2 開啟SNAT的命令
1.臨時開啟∶
echo 1 >/proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip forward=1
2.永久開啟:
vim /etc/ sysctl. conf
net. ipv4.ip_ forward = 1 #將此行寫入配置檔案
sysctl -P #讀取修改後的配置
1.3 SNAT轉換
區域網PC封裝源、如:目ip(源地址:192.168.100.77,目的地址:172.16.16.101),到達閘道器路由器,SNAT將源地址轉換成唯一的一個公網ip,此時源地址變成了公網ip172.16.16.254(eth0),再把資料包重新封裝。當外網伺服器收到,進行資料回覆的時候。源目對調,源地址是web伺服器地址,目標地址是閘道器地址,找到閘道器路由之後,在閘道器路由中會有一個狀態記錄(區域網內或許不止一臺主機訪問外網),轉發回去。
1.3.1 SNAT轉換1∶固定的公網IP地址∶
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -i SNAT --to 12.0.0.1
或
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to-source 12.0.0.1-12.0.0.10
內網IP 出站 外網網絡卡 外網IP或地址池
1.3.2 SNAT實驗
web伺服器 --------------------- 閘道器伺服器------------------------------------------------win7客戶端
ens33:192168.80.100 12.0.0.100
192.168.80.77 ens37: 12.0.0.1
實驗準備:
web伺服器ip:192.168.80.77(nat1)、關閉防火牆和selinux、開啟http服務
閘道器伺服器內網ip:192.168.80.100(nat1);外網ip:12.0.0.1(nat2)、關閉防火牆和selinux、開啟http服務
win7客戶端ip:12.0.0.10(nat2)
VMware的虛擬網路編輯器中預設nat模式網段:192.168.80.0,nat2模式網段:12.0.0.0
第一步:配置web伺服器(192.168.80.77)相關配置
設定VMnat1
開啟虛擬機器,配置ip如下
安裝httpd服務(本地源和官方線上源都可以)
開啟httpd服務,關閉防火牆和selinux
第二步:配置閘道器伺服器(192.168.80.100/12.0.0.1)的相關配置
設定閘道器伺服器的網路模式
複製並修改ens37網絡卡
可以看的兩個網絡卡的ip如下
安裝httpd服務(本地源和官方線上源都可以)
開啟httpd服務,關閉防火牆和selinux
第三步:配置win10客戶端(12.0.0.100)的相關配置
設定win10的網路模式為nat2
配置ip和閘道器為下圖所示
第四步:網路測試,web服務和win10客戶端都可以訪問閘道器伺服器的ens33和ens37,但是不能互相訪問
web伺服器網路測試如下
Win7客戶端的網路測試如下
第五步:閘道器伺服器開啟SNAT的命令
第六步:使用win10客戶端來訪問web伺服器的阿帕奇網站
檢視web伺服器的訪問日誌,顯示訪問的ip為win10客戶機的ip
第七步:配置閘道器伺服器的iptables規則
- 檢視閘道器伺服器的iptables規則並清除
iptables -nL #檢視規則
iptables -nL -t nat #檢視規則
iptables -F #清除iptables的規則
iptables -F -t nat #清除iptables的規則
2. 新增 SNAT轉換∶固定的公網IP地址
3. 清除記錄再次使用Win10客戶機進行訪問web伺服器
4. 檢視web伺服器的訪問日誌,可以看到現在顯示的訪問ip為閘道器地址的ip,是我使用iptables配置的ip。
1.3.3 SNAT轉換2: 非固定的公網IP地址 (共享動態IP地址)
其他設定大致相同,大家可以自己試一下,然後配置的SNAT如下:
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j MASQUERADE
小知識擴充套件∶ 一個IP地址做SNAT轉換,一般可以讓內網 100到200 臺主機實現上網。
二、 DNAT原理的應用
2.1 DNAT的工作原理
進行DNAT轉發的過程如下圖:
2.2 DNAT轉換前提條件
- 區域網的伺服器能夠訪問Internet
- 閘道器的外網地址有正確的DNS解析記錄
- Linux閘道器開啟IP路由轉發
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysct1 -p
2.3 DNAT轉換1∶ 釋出內網的Web服務
#把從ens33進來的要訪問web服務的資料包目的地址轉換為 192.168.80.11
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 80 -j DNAT --to 192.168.80.11
或
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 80-j DNAT --to-destination 192.168.80.11
入站|外網網絡卡 | 外網ip
iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80-j DNAT --to 192.168.80.11-192.168.80.20
2.4 DNAT轉換2∶ 釋出時修改目標埠
#釋出區域網內部的OpenSSH伺服器, 外網主機需使用250埠進行連線
iptables-t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp--dport 250-jDNAT --to 192.168.80.11:22
#在外網環境中使用SSH測試ssh -p 250 [email protected]
yum -y install net-tools #若沒有 ifconfig 命令可提前使用 yum 進行安裝
ifconfig ens33
注意∶ 使用DNAT時,同時還有配合SNAT使用,才能實現響應資料包的正確返回 小知識擴充套件∶
主機型防火牆 主要使用 INPUT、oUTPUT 鏈, 設定規則時一般要詳細的指定到埠
網路型防火牆 主要使用 FORWARD鏈,設定規則時很少去指定到埠,一般指定到IP地址或者到網段即可
2.5 防火牆規則的備份和還原
匯出 (備份)所有表的規則
iptables-save > /opt/ipt.txt
匯入(還原)規則
iptables-restore < /opt/ipt.txt
將iptables規則檔案儲存在 /etc/sysconfig/iptables 中,iptables服務啟動時會自動還原規則 iptables-save >/etc/sysconfig/iptables
systemctl stop iptables #停止iptables服務會清空掉所有表的規則
systemctl start iptables #啟動iptables服務會自動還原/etc/sysconfig/iptables 中的規則
三、Linux抓包
(1)tcp∶ ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個引數的位置,用來過濾資料報的型別
(2)-i ens33 ∶只抓經過介面ens33的包
(3)-t ∶不顯示時間戳
(4)-s 0 ∶ 抓取資料包時預設抓取長度為68位元組。加上-s 0 後可以抓到完整的資料包
(5)-c 100 ∶只抓取100個數據包
(6)dst port ! 22 ∶不抓取目標埠是22的資料包
(7)src net 192.168.1.0/24 ∶資料包的源網路地址為192.168.1.0/24。Net:網段,host:主機
(8)-w ./target.cap ∶ 儲存成cap檔案,方便用ethereal (即wireshark)分析