1. 程式人生 > 其它 >SNAT和DNAT原理與應用

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規則

  1. 檢視閘道器伺服器的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轉換前提條件

  1. 區域網的伺服器能夠訪問Internet
  2. 閘道器的外網地址有正確的DNS解析記錄
  3. 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)分析