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

SNAT/DNAT原理與應用

SNAT原理與應用

應用環境

  • 區域網主機共享單個公網IP地址接入Internet(私有IP不能在Internet中正常路由
  • 一個IP地址做SNAT轉換,一般可以讓內網 100到200 臺主機實現上網

原理

  修改資料包的源地址

SNAT轉換前提條件

  • 區域網各主機已正確設定IP地址、子網掩碼、預設閘道器地址
  • Linux閘道器開啟IP路由轉發

路由轉發開啟方式

1 1.臨時開啟:
2 echo 1 > /proc/sys/net/ipv4/ip_forward
3 或
4 sysctl -w net.ipv4.ip_forward=1
5 2.永久開啟:
6 vim /etc/sysctl.conf
7 net.ipv4.ip_forward = 1     #將此行寫入配置檔案
8 3.sysctl -p
#讀取修改後的配置

 SNAT轉換具體格式

固定的公網IP地址

1 iptables -t nat -A POSTROUTING -s 192.168.80.0/24(內網IP) -o(出站) ens33(外網網絡卡) -j SNAT --to 12.0.0.1(外網IP或地址池)
2 或
3 iptables -t nat -A POSTROUTING -s 192.168.80.0/24(內網IP) -o(出站) ens33(外網網絡卡) -j SNAT --to-source 12.0.0.1-12.0.0.10(外網IP或地址池)

非固定的公網IP地址(共享動態IP地址)

1 iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j MASQUERADE

DNAT原理與應用

應用環境

在Internet中釋出位於區域網內的伺服器。
主機型防火牆:主要使用INPUT、OUTPUT鏈,設定規則時一般要詳細的指定到埠
網路型防火牆:主要使用FORWARD鏈,設定規則時很少去指定到埠,一般指定到IP地址或者到網段即可。

原理

修改資料包的目的地址

DNAT轉換前提條件

區域網的伺服器能夠訪問Internet
閘道器的外網地址有正確的DNS解析記錄
Linux閘道器開啟IP路由轉發

DNAT轉換

使用DNAT時,同時配合SNAT使用,才能實現響應資料包的正確返回

  1. 釋出內網的Web服務
1 #把從ens33進來的要訪問web服務的資料包目的地址轉換為 192.168.80.11
2 iptables -t nat -A PREROUTING -i(入站) ens33(外網網絡卡) -d 12.0.0.1(外網IP) -p tcp --dport 80 -j DNAT --to 192.168.80.11(內網伺服器Ip)
3 或
4 iptables -t nat -A PREROUTING -i(入站) ens33(外網網絡卡) -d 12.0.0.1(外網IP) -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11(內網伺服器IP)
5 iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 192.168.80.11-192.168.80.20(地址池)
  1. 釋出時修改目標埠
1 #釋出區域網內部的OpenSSH伺服器,外網主機需使用250埠進行連線
2 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.80.11:22
1 ssh -p 250 [email protected]         #在外網環境中使用SSH測試
2 yum -y install net-tools         #若沒有 ifconfig 命令可提前使用 yum 進行安裝
3 ifconfig ens33

防火牆規則的備份和還原

匯出(備份)所有表的規則

1 iptables-save > /opt/ipt.txt

匯入(還原)規則

1 iptables-restore < /opt/ipt.txt
2 將iptables規則檔案儲存在 /etc/sysconfig/iptables 中,iptables服務啟動時會自動還原規則
3 iptables-save > /etc/sysconfig/iptables
4 systemctl stop iptables                       #停止iptables服務會清空掉所有表的規則
5 systemctl start iptables                      #啟動iptables服務會自動還原/etc/sysconfig/iptables 中的規則

linux系統抓包

格式

例:tcpdump tcp -i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

選項說明
tcp ip icmp arp rarptcp、udp、icmp這些選項等都要放到第一個引數的位置,用來過濾資料包的型別
-i ens33 只抓經過介面ens33的包
-t 不顯示時間戳
-s 0 抓取資料包時預設抓取長度為68位元組。加上-s 0後可以抓取完整的資料包
-c 100 只抓取100個數據包
dst port !22 不抓取目標埠是22的資料包
src net 192.168.1.0/24 資料包的源網路地址為192.168.1.0/24
-w ./target.cap 儲存成cap檔案,方便用ethereal(wireshark)分析