Linux中的SNAT與DNAT實踐
- 1、SNAT的介紹
- 1.1,SNAT概述
- 1.2,SNAT源地址轉換過程
- 1.3,SNAT轉換
- 2、DNAT的介紹
- 2.1,DNAT概述
- 2.2,DNAT轉換前提條件
- 2.3,DNAT的轉換
- 3、防火墻規則的備份和還原
- 4、tcpdump抓包工具的運用
1、SNAT的介紹
1.1,SNAT概述
SNAT(SNAT)一般指源地址轉換。源地址轉換是內網地址向外訪問時,發起訪問的內網ip地址轉換為指定的ip地址(可指定具體的服務以及相應的端口或端口范圍),這可以使內網中使用保留ip地址的主機訪問外部網絡,即內網的多部主機可以通過一個有效的公網ip地址訪問外部網絡。
SNAT 應用環境:局域網主機共享單個公網IP地址接入Internet(私有不能早Internet中正常路由)。
SNAT原理:修改數據包的源地址。
SNAT轉換前提條件:局域網各主機已正確設置IP地址、子網掩碼、默認網關地址、Linux網關開啟IP路由轉發。
臨時打開:
echo 1 > /proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip_forward=1永久打開:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
1.2,SNAT源地址轉換過程
- 數據包從內網發送到公網時,SNAT會把數據包的源地址由私網IP轉換成公網IP。
- 當相應的數據包從公網發送到內網時,會把數據包的目的地址由公網IP轉換為私網IP。
- 當內網有多臺主機訪問外網時,SNAT在轉換時會自動分配端口,不同內網主機會通過端口號進行區分。
1.3,SNAT轉換
固定的公網IP地址:
iptables -t nat -A POSTROUTING -s 192.168.30.0/24 -o ens33 -j SNAT --to 12.0.0.1
或
iptables -t nat -A POSTROUTING -s 192.168.30.0/24 -o ens33 -j SNAT --to-source 12.0.0.1-12.0.0.10非固定的公網IP地址(共享動態IP地址):
iptables -t nat -A POSTROUTING -s 192.168.30.0/24 -o ens33 -j MASQUERADE
2、DNAT的介紹
DNAT 的全稱為Destination Network Address Translation目的地址轉換,常用于防火墻中。
2.1,DNAT概述
DNAT:目的地址轉換的作用是將一組本地內部的地址映射到一組全球地址。通常來說,合法地址的數量比起本地內部的地址數量來要少得多。
私網地址只能作為源地址來訪問公網IP,而無法作為目標地址被其他主機訪問
所以DNAT將私網中web服務器映射到公網IP,使其公網IP作為目標地址被公網中主機進行訪問
DNAT 應用環境:在Internet中發布位于局域網內的服務器
DNAT原理:修改數據包的目的地址。
2.2,DNAT轉換前提條件
- 局域網的服務器能夠訪問Internet
- 網關的外網地址有正確的DNS解析記錄
- Linux網關開啟IP路由轉發
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
2.3,DNAT的轉換
DNAT轉換1:發布內網的Web服務
#把從ens33進來的要訪問web服務的數據包目的地址轉換為 192.168.30.10
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.30.10
或
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.30.10
DNAT轉換2:發布時修改目標端口
#發布局域網內部的OpenSSH服務器,外網主機需使用250端口進行連接
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.80.10:22#在外網環境中使用SSH測試
ssh -p 250 root@12.0.0.1
注意:使用DNAT時,同時還有配合SNAT使用,才能實現響應數據包的正確返回。
主機型防火墻: 主要使用 INPUT、OUTPUT 鏈,設置規則時一般要詳細的指定到端口。
網絡型防火墻: 主要使用 FORWARD 鏈,設置規則時很少去指定到端口,一般指定到IP地址或者到網段即可。
3、防火墻規則的備份和還原
`導出(備份)所有表的規則`
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 中的規則
4、tcpdump抓包工具的運用
# tcpdump是Linux系統中自帶抓包工具
tcpdump tcp -i ens32 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.30.0/24 -w ./target.cap=== 字段說明 ===
tcp :ip、icmp、arp、rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾數據報的類型。
-i ens33 :只抓經過接口ens33的包。
-t :不顯示時間戳
-s0 :抓取數據包時默認抓取長度為68字節。加上"-s 0"后可以抓到完整的數據包。
-c 100 :只抓取100個數據包。
dst port ! 22 :不抓取目標端口是22的數據包。
src net 192.168.1.0/24 :數據包的源網絡地址為192.168.1.0/24。Net:網段,host:主機。
-w ./target.cap :保存成cap文件,方便用ethereal (即wireshark)分析。