国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

詳解Linux下iptables中的DNAT與SNAT設置

2020-07-10 11:14:06
字體:
來源:轉載
供稿:網友

DNAT(Destination Network Address Translation,目的地址轉換) 通常被叫做目的映謝。而SNAT(Source Network Address Translation,源地址轉換)通常被叫做源映謝。
這是我們在設置Linux網關或者防火墻時經常要用來的兩種方式。以前對這兩個都解釋得不太清楚,現在我在這里解釋一下。
首先,我們要了解一下IP包的結構,如下圖所示:
20151123120626845.gif (616×278)

在任何一個IP數據包中,都會有Source IP Address與Destination IP Address這兩個字段,數據包所經過的路由器也是根據這兩個字段是判定數據包是由什么地方發過來的,它要將數據包發到什么地方去。而iptables的DNAT與SNAT就是根據這個原理,對Source IP Address與Destination IP Address進行修改。
然后,我們再看看數據包在iptables中要經過的鏈(chain):
20151123120648524.png (501×258)

圖中正菱形的區域是對數據包進行判定轉發的地方。在這里,系統會根據IP數據包中的destination ip address中的IP地址對數據包進行分發。如果destination ip adress是本機地址,數據將會被轉交給INPUT鏈。如果不是本機地址,則交給FORWARD鏈檢測。
這也就是說,我們要做的DNAT要在進入這個菱形轉發區域之前,也就是在PREROUTING鏈中做,比如我們要把訪問202.103.96.112的訪問轉發到192.168.0.112上:
iptables -t nat -A PREROUTING -d 202.103.96.112 -j DNAT --to-destination 192.168.0.112
這個轉換過程當中,其實就是將已經達到這臺Linux網關(防火墻)上的數據包上的destination ip address從202.103.96.112修改為192.168.0.112然后交給系統路由進行轉發。
而SNAT自然是要在數據包流出這臺機器之前的最后一個鏈也就是POSTROUTING鏈來進行操作
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 58.20.51.66
這個語句就是告訴系統把即將要流出本機的數據的source ip address修改成為58.20.51.66。這樣,數據包在達到目的機器以后,目的機器會將包返回到58.20.51.66也就是本機。如果不做這個操作,那么你的數據包在傳遞的過程中,reply的包肯定會丟失。

注意,DNAT target只能用在nat表的PREOUTING 和 OUTPUT 鏈中,或者是被這兩條鏈調用的鏈里。但還要注意的是,包含DNAT target的連不能被除此之外的其他鏈調用,如POSTROUTING。

復制代碼
代碼如下:

Table 6-16. DNAT target
Option --to-destination
Example iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10

    Explanation指定要寫入IP頭的地址,這也是包要被轉發到的地方。上面的例子就是把所有發往地址15.45.23.67的包都轉發到一段LAN使用的私有地址中,即192.168.1.1到192.168.1.10。如前所述,在這種情況下,每個流都會被隨機分配一個要轉發到的地址,但同一個流總是使用同一個地址。我們也可以只指定一個IP地址作為參數,這樣所有包都被轉發到同一臺機子。我們還可以在地址后指定一個或一個范圍的端口。比如:--to-destination 192.168.1.1:80或192.168.1.1:80-100。SNAT的語法和這個target的一樣,只是目的不同罷了。要注意,只有先用--protocol指定了TCP或UDP協議,才能使用端口。
    因為DNAT要做很多工作,所以我要再 主站蜘蛛池模板: 临夏市| 绩溪县| 渝中区| 桦南县| 上高县| 偏关县| 瓮安县| 天祝| 皮山县| 商水县| 独山县| 达日县| 丰宁| 台安县| 鄂伦春自治旗| 外汇| 永仁县| 武城县| 万山特区| 谷城县| 东宁县| 广宁县| 葵青区| 康定县| 汉寿县| 加查县| 上饶市| 滕州市| 陕西省| 景泰县| 石景山区| 海城市| 铜川市| 南阳市| 麻城市| 疏附县| 襄垣县| 南安市| 阳山县| 濮阳市| 五华县|