1. 程式人生 > 其它 >NAT與DNAT的原理與應用

NAT與DNAT的原理與應用

一、SNAT原理與應用

1、SNAT應用環境

區域網主機共享單個公網IP地址接入Internet (私有IP不能在Internet中正常路由)

2、SNAT原理

修改資料包的源地址

3、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
#將此行寫入配置檔案
sysctl -P
#讀取修改後的配置

4、SNAT轉換1:固定的公網IP地址:

SNAT轉換1:固定的公網IP地址:
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j 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或地址池
-s 內網IP
-o 出站外網網絡卡
source 外網IP或地址池

5、SNAT轉換2:非固定的公網IP地址(共享動態IP地址) :

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

小知識擴充套件: 一個I P地址做SNAT轉換,一般可以讓內網100到200 臺主機實現上網

二、DNAT原理與應用

DNAT轉換前提條件:

1.區域網的伺服器能夠訪問Internet

2.閘道器的外網地址有正確的DNS解析記錄

3.Linux閘道器開啟IDNAT轉換1:釋出內網的Web服務

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

sysctl -P

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											   內網伺服器IP

iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 192.168.80.11-192.168.80.20

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.11:22

#在外網環境中使用SSH測試
ssh -p 250 [email protected]
yum -y install net-tools
#若沒有ifconfig 命令可提前使用yum 進行安裝
ifconfig ens33

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

小知識擴充套件:

  • 主機型防火牆主要使用INPUT、OUTPUT鏈,設定規則時一-般要詳細的指定到埠

  • 網路型防火牆主要使用FORWARD鏈,設定規則時很少去指定到埠,一般指定到IP地址或者到網段即可

三、防火牆規則的備份和還原

匯出(備份)所有表的規則
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、tcpdump簡介

tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器;它可以打印出所有經過網路介面的資料包的頭資訊。

tcpdump命令工作時先要把網絡卡的工作模式切換到混雜模式。所以tcpdump命令需要以root身份執行。tcpdump命令是linux下使用最廣泛的網路協議分析工具。使用tcpdump命令時,必須精通TCP/IP協議工作原理。

2、格式

tcpdump [引數]

3、常用引數

常用引數 說明
-a 嘗試將網路和廣播地址轉換成名稱
-c<資料包數目> 收到指定的資料包數目後,就停止進行傾倒操作
-d 把編譯過的資料包編碼轉換成可閱讀的格式,並傾倒到標準輸出
-dd 把編譯過的資料包編碼轉換成C語言的格式,並傾倒到標準輸出
-ddd 把編譯過的資料包編碼轉換成十進位制數字的格式,並傾倒到標準輸出
-e 在每列傾倒資料上顯示連線層級的檔案頭
-f 用數字顯示網際網路地址
-F<表達檔案> 指定內含表達方式的檔案
-i<網路介面> 使用指定的網路截面送出資料包
-l 使用標準輸出列的緩衝區
-n 不把主機的網路地址轉換成名字
-N 不列出域名
-O 不將資料包編碼最佳化
-p 不讓網路介面進入混雜模式
-q 快速輸出,僅列出少數的傳輸協議資訊
-r<資料包檔案> 從指定的檔案讀取資料包資料
-s<資料包大小> 設定每個資料包的大小
-S 用絕對而非相對數值列出TCP關聯數
-t 在每列傾倒資料上不顯示時間戳記
-tt 在每列傾倒資料上顯示未經格式化的時間戳記
-T<資料包型別> 強制將表達方式所指定的資料包轉譯成設定的資料包型別
-v 詳細顯示指令執行過程
-vv 更詳細顯示指令執行過程
-x 用十六進位制字碼列出資料包資料
-w<資料包檔案> 把資料包資料寫入指定的檔案

4、示例