NAT與DNAT的原理與應用
阿新 • • 發佈:2021-08-03
一、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<資料包檔案> | 把資料包資料寫入指定的檔案 |