這是我參與更文挑戰的第 12 天,活動詳情查看:更文挑戰linux
一名致力於在技術道路上的終身學習者、實踐者、分享者,一位忙起來又偶爾偷懶的原創博主,一個偶爾無聊又偶爾幽默的少年。web
微信搜索 【傑哥的IT之旅】關注後回覆:【wx】可加入百人讀者交流羣;瀏覽器
SNAT全稱爲:Source Network Address Translation 源地址轉換
微信
SNAT 是 Linux 防火牆的一種地址轉換操做,iptables 命令中的一種數據包控制類型;markdown
SNAT做用
:根據指定條件修改數據包的源 IP 地址。網絡
隨着 IP 地址資源逐漸減小,使企業難以申請公網 IP 地址,或只能認可一個或者少數幾個公網 IP 地址的費用,因此在大部分企業中將面臨着局域網內的主機接入 Internet 的需求。採用小型的企業網絡,經過在網關中應用 SNAT 策略,可解決局域網共享上網的問題。ssh
Linux 網關服務器需經過兩塊網卡 eth一、eth2分別鏈接 Internet 和 局域網,來分析局域網主機訪問 Internet 的狀況。tcp
局域網各主機正確設置 IP 地址 / 子網掩碼 / 默認網關地址oop
Eth1: 192.168.3.111/24 Gw : 192.168.3.1
Eth2: 192.168.1.7/24 (鏈接內網網卡不配置網關)
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:f9:55:5b brd ff:ff:ff:ff:ff:ff
inet 192.168.1.7/24 brd 192.168.1.255 scope global eth2
inet6 2409:8a00:30f8:4d70:20c:29ff:fef9:555b/64 scope global dynamic
valid_lft 259010sec preferred_lft 172610sec
inet6 fe80::20c:29ff:fef9:555b/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:f9:55:65 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.111/24 brd 192.168.3.255 scope global eth1
inet6 fe80::20c:29ff:fef9:5565/64 scope link
valid_lft forever preferred_lft forever
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.3.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth2
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth2
複製代碼
關閉防火牆和 selinux
# service iptables stop
iptables:將鏈設置爲政策 ACCEPT:filter [肯定]
iptables:清除防火牆規則: [肯定]
iptables:正在卸載模塊: [肯定]
# setenforce 0
複製代碼
做爲網關的 Linux 服務器必須打開路由轉發,才能與多個網絡進行連通。
未使用地址轉換策略時,從局域網 PC 192.168.1.123 訪問 Internet 的數據包通過網關轉發後其源 IP 低至保持不變,當 Internet 中的主機收到這樣的請求數據包後,響應數據包將沒法正確返回,從而致使訪問失敗。(私網地址不能在 Internet 中正常路由)
在網關服務器中正確應用 SNAT 策略,數據包轉發狀況就不同了。
局域網 PC 訪問 Internet 的數據包到達網關服務器時,先進行路由選擇,若發現該數據包須要從外網接口 eth1 向外轉發,則將其源 IP 地址 192.168.1.123 修改成網關的外網接口地址 192.168.3.111,而後才發送給目標主機 192.168.3.112。
從網關服務器的公網 IP 地址提交數據訪問請求,目標主機可正確返回響應數據包,來實現局域網 PC 共享同一個公網 IP 地址接入 Internet。
SNAT 轉換地址的過程當中,網關服務器會根據以前創建的 SNAT 映射,將響應數據包正確返回局域網中的源主機。只要鏈接的第一個包被 SNAT 處理了,這鏈接及對應數據流的其餘包會自動的被進行 SNAT 處理。Internet 中的服務器其實不知道局域網 PC 的 IP 地址,其中間的轉換徹底由網關主機完成,可起到內網保護的做用。
SNAT 策略應用
:是爲局域網共享上網提供接入策略,處理數據包的切入時機是在路由選擇後進行,是將局域網外發數據包的源 IP 地址修改成網關服務器的外網接口 IP 地址。
SNAT 策略用在 nat 表的 postrouting 鏈。
編寫 SNAT 策略時,需使用 iptables 命令結合--to-source IP 地址
選項來指定修改後的源 IP 地址。
IP 轉發是實現路由功能的關鍵,對應 /proc 文件系統中的 ip_forward 設置。
當值爲 1 時表示開啓,爲 0 時表示關閉。
使用 Linux 主機做爲網關設備,可修改sysctl.conf 配置文件
,需永久開啓路由轉發功能。
# vi /etc/sysctl.conf
7 net.ipv4.ip_forward = 1 # 將第 7 行的配置由原來的 0 改成 1
# sysctl -p # 讀取修改後的配置
複製代碼
測試過程當中,可臨時開啓路由轉發。
# echo 1 > /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
複製代碼
針對局域網 PC 訪問 Internet 的數據包採用 SNAT 策略,並將源地址改成網關的公網 IP 地址,設置防火牆規則,保持 SNAT 策略長期有效,並將相關命令寫入到rc.local
配置文件,方便開機後自動設置。
`# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT--to-source 192.168.3.111`
複製代碼
使用局域網中的 PC 即可以正常訪問 Internet 中的網站了。
被訪問的網站服務器,會認爲是網關主機 192.168.3.111 在訪問獲取 web 日誌,而並不知道是不是實際企業內網的 PC 地址 192.168.3.123 在訪問。
啓動一臺 Windows 設備,根據實際狀況配置 IP 地址,並測試連通性;
在 Windows 操做系統上安裝 IIS 服務,選擇 Internet 信息服務選項便可;
安裝完畢以後,打開瀏覽器輸入本機的 IP 地址便可訪問;
iptables 提供了一個名爲 masquerade 的數據包控制類型,可用來修改數據包源 IP 地址,可以自動獲取外網接口的 IP 地址,不須要使用--to-source
指定固定的 IP 地址。
若要使用 MASQUERADE 假裝策略,只需去掉 SNAT 策略中的 --to-source IP 地址,而後使用 -j MASQUERADE 指定數據包控制類型。
ADSL 寬帶連接,一般鏈接名稱爲:ppp0、ppp1等等;
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
複製代碼
若是網關使用固定的公網 IP 地址,最好選擇 SNAT 策略而不是 masquerade 策略,以減小沒必要要的系統開銷。
DNAT 全稱爲:Destination Network Address Translation (目標地址轉換)
DNAT 是Linux 防火牆
的另外一種地址轉換操做,是iptables
命令中的一種數據包控制類型;
做用:根據指定條件修改數據包的目標 IP 地址和目標端口。
DNAT:用來修改目標 IP 地址和目標端口,用在 nat 表的 PREROUTING 鏈和 OUTPUT 鏈中。
與 SNAT 類似,SNAT 用來修改源 IP 地址,用在 nat 表的 POSTROUTING 鏈。
在 Internet 環境中,所註冊的網站域名必須對應合法的公網 IP 地址,Internet PC 將沒法訪問公司內網的服務器,除非在網關服務器中正確設置 DNAT 策略。
Internet PC 提交的 HTTP 請求到企業的網關服務器時,網關服務器首先判斷數據包的目標地址和目標端口,發現數據包須要訪問本機的 80 端口,則將其目標 IP 地址修改成內網中的網站服務器 IP 地址,而後發送給內部的網站服務器。
網關服務器會根據以前創建的 DNAT 映射,修改返回的 HTTP 應答數據包的源 IP 地址,再返回給 Internet PC 。
Internet PC 其實不知道企業網站服務器的局域網地址,中間轉換是由網關主機完成,經過設置的 DNAT 策略,企業內部的服務器就能夠面向 Internet 提供服務。
DNAT 應用:是在 Internet 中發佈企業內部的服務器,處理數據包的切入時機是在路由選擇以前進行。將訪問網關外網接口 IP 地址的數據包的目標地址修改成實際提供服務的內部服務器的 IP 地址。
使用 iptables 命令設置 DNAT 策略時,須要結合--to-destination IP 地址
選項來指定內部服務器的 IP 地址。
# vi /etc/sysctl.conf
7 net.ipv4.ip_forward = 1 # 將第 7 行的配置由原來的 0 改成 1
# sysctl -p # 讀取修改後的配置
複製代碼
針對 Internet 中的任意主機訪問網關 80 端口的數據包,將目標地址修改成位於內網的網站服務器 IP 地址。
# iptables -t nat -A PREROUTING -i eth2 -d 192.168.1.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.3.112
# iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- eth2 * 0.0.0.0/0 192.168.1.7 tcp dpt:80 to:192.168.3.112
Chain POSTROUTING (policy ACCEPT 1 packets, 136 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1 packets, 136 bytes)
pkts bytes target prot opt in out source destination
複製代碼
在網站服務器 192.168.3.112 中正確設置,啓動 web 服務,測試網頁,可自定義修改首頁文件,而後經過 Internet 中的客戶機訪問網站,不作 DNS 解析,也可直接訪問。
DNAT 策略:用來修改數據包的目標 IP 地址,但在須要時也可修改目標端口號。
在網關,網站服務器中開啓 OpenSSH 服務,分別使用 234五、22 端口。
網關的 sshd 服務因直接面向 Internet,所以不使用默認端口。
# vi /etc/sysctl.conf
7 net.ipv4.ip_forward = 1 # 將第 7 行的配置由原來的 0 改成 1
# sysctl -p # 讀取修改後的配置
複製代碼
網關本機的 sshd 服務直接面向 Internet,不須要地址轉換,但網站服務器位於內網,需經過 DNAT 策略進行發佈。
網關設置防火牆規則,修改訪問外網的 IP 地址 2346 端口的數據包,及修改目標地址和端口,便於轉發給網站服務器。
# iptables -t nat -A PREROUTING -i eth2 -d 192.168.1.7 -p tcp --dport 2346 -j DNAT --to-destination 192.168.3.112:22
複製代碼
使用ssh -p 2345 / 2346 用戶名@eth2 IP 地址
便可登陸網關服務器
iptables 防火牆(一)| 四表/五鏈、數據包匹配流程、編寫 iptables 規則
本文主要介紹了 SNAT 策略概述、SNAT 策略應用、DNAT 策略及應用等內容;
原創不易,若是你以爲這篇文章對你有點用的話,麻煩你爲本文點個贊、評論或轉發一下,由於這將是我輸出更多優質文章的動力,感謝!
咱們下期再見!