天天看點

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

作者:旋律果子

#大有學問#

簡介:Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端通路内網資料?【好玩的網絡-私有雲08】

附經典案例,分析與解決方案

  • Linux防火牆介紹
  • iptables與firewalld介紹
  • nat表,prerouting鍊,postrouting鍊
  • filter表,forward鍊
  • IP僞裝和端口映射的具體實作

本期約3400字,閱讀時長3分鐘。

視訊教程:視訊

IP僞裝規則(秒變路由器):

firewall-cmd --direct --add-passthrough ipv4 -t nat -A POSTROUTING -j MASQUERADE -o pppoe-eno1

firewall-cmd --direct --add-passthrough ipv6 -t nat -A POSTROUTING -j MASQUERADE -o pppoe-eno1

端口映射:

firewall-cmd --direct --add-passthrough ipv4 -t nat -A PREROUTING -p tcp --dport 51413 -j DNAT –to-destination 192.168.4.232:51414 -i pppoe-eno1

文檔教程(私有雲篇指令腳本):GitHub - yzeng1995/funNetworkPrivateCloud

軟路由,防火牆,NAT,路由器,Linux,端口映射,遠端通路,旋律果子,好玩的網絡

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

Hi,大家好,我是繼續填坑的小夥伴旋律果子,一個專注于網絡技術Geek。教大家搭建NAS和軟路由的私有雲系列視訊已經出了7期了,

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

1.上期回顧

上一期講了防火牆filter表的input鍊,

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

filter表的主要作用阻斷惡意連結,而input方向入站的網絡資料包威脅最大,是以我們一般在filter表的input鍊做安全規則,主要有開放端口、關閉端口,拒絕或允許某些源IP位址的資料包,拒絕資料包從某個網卡進入等操作。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

2.本期提綱

這一期,我們主要學習一下nat表的prerouting鍊和postrouting鍊。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料
Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

分别對應着常說的端口映射和IP僞裝。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料
Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

在學習的過程中,一定要對着netfilter的流程圖來進行了解。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

在看這期視訊時,如果你沒有聽說過IP僞裝和端口映射,可以先去補一下好玩的網絡基礎篇第3期路由器的相關内容,詳細講解了網絡層與路由表,以及NAT位址轉換等概念。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

了解之後,我們開始這一期的内容吧。

經典案例

我們先看一個實際的問題,比較典型。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

網絡環境是這樣,他在家中和辦公室中都搭建了NAS伺服器,管理頁面的端口都是5000/tcp端口,兩邊都在openwrt系統的主路由中通過端口映射的方式将NAS的管理頁面映射到公網的9527/tcp端口。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

現在,如果通過手機流量通路辦公室、家裡兩地的公網位址,均可以正常通路到對應的NAS管理頁面。

如果在上班的時候,手機連接配接辦公室的區域網路,仍然去通路家裡的公網位址,結果發現通路到的卻是辦公室的NAS。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

如果兩邊主路由的端口不一緻,那麼這個通路是一切正常的。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

大家可以先思考一下這個問題是怎麼回事?我們等會就來一探究竟。

NAT表

Nat的全稱是network address translation,顧名思義,就是網絡位址轉換。

這裡不僅僅包括資料包的源IP位址和目的IP位址,還包含源端口号和目的端口号。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

路由器的主要作用是什麼呢?

就是根據路由表來為資料包做路徑選擇的,Prerouting和postrouting,也顧名思義,pre就是“前”的意思,就是在進行路由選擇之前先進行網絡位址轉換;

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

post就是“後”的意思,就是在路由選擇之後再進行網絡位址轉換。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

要完成網絡位址轉換,我們首先得知道要轉換哪些資料包的網絡位址。

也就是需要識别資料包。一般情況下,我們可以通過7大參數來識别。

入站網卡、出站網卡,源ip位址、目的ip位址,源端口号和目的端口号以及協定類型。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

識别資料包之後,我們就要對這些資料包進行一定的操作。

Nat表中有幾個非常重要的操作,SNAT、DNAT以及MASQUERADE,SNAT是修改源IP位址和源端口号,DNAT是修改目的IP位址和目的端口号,要執行SNAT和DNAT必須指定修改後的内容。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

進行DNAT主要是進行端口映射将從公網來的資料包轉發到内網主機,而内網主機的ip位址一般都是固定的,是以沒什麼問題。然而SNAT主要是為了做IP僞裝,并且是僞裝成公網位址,我們知道,我們的寬帶一般能擷取到的是動态公網IP位址,也是就是說一個網卡上的公網IP位址經常發生變化的,是以直接使用SNAT操作就沒辦法實時指定修改後的源IP位址。是以就有了MASQUERADE,這是一種特殊的SNAT。MASQUERADE會将源IP位址自動修改為出口網卡上的IP位址。

從防火牆的角度觀察内網資料包出去的過程

現在我們再來從防火牆的角度觀察内網資料包出去的過程。路由器有兩個網口,内網網口為br-lan,外網網卡為pppoe-eno1。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

實操示範IP僞裝

我們直接給大家展示一下應該添加的IP僞裝規則。

就這麼2行指令,IP僞裝就添加好了,其中一條是針對ipv4的,另外一條是針對ipv6的。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

我們識别資料包是根據出口網卡來識别的,隻要資料包從pppoe-eno1這個網卡出去,就會被這個規則識别到,進行IP僞裝。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

例如内網的主機192.168.4.167通路百度220.181.38.148,

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

首先,資料包會從路由器的lan口進入。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

然後經過路由器的prerouting鍊,

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

因為在prerouting鍊裡沒有寫規則,是以資料包不發生任何變化;因為目标位址不是路由器本機,是以接下來走filter表的forwarding鍊,

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

因為lan到wan的轉發一般為允許,是以可以通過,

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

接下來資料包會被轉發給wan口網卡準備出站。随後資料包繼續經過nat表的postrouting鍊,

這裡檢測到資料包從wan口出來,是以進行MASQUERADE操作,

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

将源IP位址修改為wan口本身的IP位址,随後将資料包傳出去。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料
Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

同時在會話表中生成一條記錄,這個記錄記錄了資料包通過防火牆的全過程(NAT)。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

當資料包從百度傳回時,首先會發送給路由器的wan口。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

路由器發現這個資料包符合會話表中的記錄,直接根據會話表将資料包還原後傳遞給内網主機。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

這裡需要注意的是,資料包隻會經過一次NAT表,出去的時候通過了一次NAT,回來的時候就不再進行NAT了。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

這就是内網的主機和外網的主機之間通訊的全過程了。隻要做了這一條規則,内部的裝置配置好ip位址、DNS、預設網關後,其實就已經可以正常上網了。

從外網通路内網主機端口映射的全過程

我們再來從防火牆的角度觀察外網的主機通過路由器的公網IP通路内網主機的過程。首先我們需要在路由器中做端口映射。我們以ipv4來舉例子,ipv6也是同樣的操作。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

例如,我們要将内網主機192.168.4.232的51414/tcp端口映射到公網的51413/tcp端口,這裡指定了tcp協定,到主路由的目的端口号,入站的網卡,以及修改後的目的ip位址和端口号。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

從外部發來的資料包首先到達路由器的wan口,

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

經過nat表的prerouting鍊,

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

經過檢測,發現入站網卡和端口都滿足規則的要求。于是将資料包的目的IP位址和目的端口号修改為目标内網主機。接下來會經曆一次路由選擇,發現目的IP位址不是路由器本機而是内網的主機,是以走filter表的forward鍊。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

這裡特别注意,走的不是input鍊而是forward鍊,是以在從wan口入站的input鍊配置的防火牆規則對此是不産生作用的。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

這就是為什麼設定了端口映射之後,不需要再在filter表中開放端口的原因。如果經過filter表的forward鍊,資料包被accept,那麼會繼續走postrouting鍊,

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

然而從lan口出站在postrouting鍊不會産生什麼效果,是以繼續從路由器的lan口轉發到内網的指定主機。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

同時也生成一條會話表的記錄。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

當内網主機傳回資料包時,先從lan口入站,發現資料包滿足會話表的記錄,直接根據會話表還原後從wan口發送給遠端的用戶端。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

這就是從外網通路内網主機端口映射的全過程了。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

案例分析與解決方案

那麼最開始的那個問題是怎麼回事呢?實際上是規則配置錯誤了。我們把這個規則給大家看一下

大家發現這個規則的問題了嗎?大家可以暫停下來思考一下(2秒)。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

因為從辦公室通路家裡的公網IP位址和9527端口,

從lan口入站的時候,我們發現這個是滿足nat表的prerouting鍊的。是以目的位址本來是指向家裡的,但是直接被修改為辦公室内網NAS伺服器的IP位址,接下來在進行路由選擇的時候,直接被轉發給了内網的NAS伺服器,是以發現通路到了辦公室的NAS主機。我告訴他在設定規則時應該指定wan口網卡,配置後,此問題得到解決。

Linux秒變軟路由?防火牆與IP僞裝/端口映射。外網遠端訪内網資料

這一期就到這裡了,有問題可以評論區提問,我是旋律果子,一個網絡極客,我們下期再見。

圖文編輯: 旋律果子 貓小爪

旋律果子: 網絡Geek/Linux開發者/中國科學院大學在讀博士/科技數位部落客/國家水利水電二級建造師/優質科技領域創作者

繼續閱讀