局域網主機共享單個公網IP地址接入Internet (私有IP不能在Internet中正常路由)linux
修改數據包的源地址web
① 局域網各主機已正確設置IP地址、子網掩碼、默認網關地址vim
② Linux網關開啓IP路由轉發bash
臨時打開: 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 #讀取修改後的配置
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或地址池
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j MASQUERADE
小知識擴展: 一個I P地址作SNAT轉換,通常可讓內網100到200 臺主機實現上網服務器
2、DNAT原理與應用1.局域網的服務器可以訪問Internet網絡
2.網關的外網地址有正確的DNS解析記錄ssh
3.Linux網關開啓IDNAT轉換1:發佈內網的Web服務tcp
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -P
#把從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
#發佈局域網內部的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 root@12.0.0.1 yum -y install net-tools #若沒有ifconfig 命令可提早使用yum 進行安裝 ifconfig ens33
小知識擴展:ide
主機型防火牆主要使用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中的規則
4、Linux抓包
tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器;它能夠打印出全部通過網絡接口的數據包的頭信息。
tcpdump命令工做時先要把網卡的工做模式切換到混雜模式。因此tcpdump命令須要以root身份運行。tcpdump命令是linux下使用最普遍的網絡協議分析工具。使用tcpdump命令時,必須精通TCP/IP協議工做原理。
tcpdump [參數]
經常使用參數 | 說明 |
-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<數據包文件> | 把數據包數據寫入指定的文件 |