軟路由系列愛快+openwrt最佳部署方案探討(再見吧,旁路由)
本文最後更新於290 天前,其中的資訊可能已經有所發展或是發生改變,如有失效可到評論區留言。

前言

我正式開始玩路由器應該netgear的R7000:

image.png

不過那時候好像還是adsl 8兆的時代,上行才512k,所以開始也沒怎麼折騰,就用的官方韌體。而且印像中那時候的封鎖遠遠不能和現在相比,影響還不算大,所以也沒有花時間折騰的想法。

過了幾年之後,封鎖越來越嚴,已經影響到平時工作了(外企技術工程師需要訪問國外網站的時候太多了),不得不考慮科學問題了,所以就把R7000刷了梅林系統並使用軟體中心安裝了shadowsocks就湊活著繼續用了(講道理,R7000性能拿到現在依然能打,只是wifi弱了點)。

多撥引發的血案-開始折騰

不知道哪一天,忽然看到了多重撥號的文章,臥槽,居然還能這麼玩,一看梅林也支持雙線單撥,馬上就試了一下,運氣不錯,發現家裡電信寬頻真可以。 。但是梅林的雙線雙撥功能太簡單,要么只能主備,要么只能兩條一起負載平衡使用,可玩性太差(畢竟我也是專業賣鏈路負載平衡設備的,有點高要求也很合理吧~~),所以就考慮其他支持多重撥號的方案,然後就看到了lede和愛快。

lede(就是openwrt的一個分支)其實也行,不過,一來我不太習慣lede的配置邏輯,比如input鏈,output鏈,forward鏈這些iptables的概念(和配置大量cisoc、華為三層交換機、路由器,還有各種型號的防火牆之後養成的習慣相比),總不能立刻反應過來,需要大腦翻譯一下,這對於我這種配置排錯靠本能的人來說很彆扭;二來,嘗試過愛快之後,發現愛快除了在多撥上的完美支持之外,其他各種功能也和多撥功能緊密結合在一起(參考我另一篇文章:愛快軟路由系列最強多撥軟路由:愛快),而且也很符合國人配置的習慣,所以最後選擇了愛快作為主路由,R7000做二級路由,所以第一次變更網路結構變成了下面這樣:

image.png

這種結構我直接把所有設備的預設閘道指向R7000的lan口位址,而R7000的wan口採用靜態IP模式,直接將預設路由指向了愛快的lan口位址,並且這裡可以把R7000的NAT功能關掉:

image.png

這是因為都串在網路中了,只是當個三層交換機用而已,根本不需要NAT,而且,關閉NAT還有一個好處,就是愛快做端口映射的時候可以直接指向內網192.168.1. x網段主機的真實內網位址(當然愛快上要寫192.168.1.x網段的回程路由並指向梅林的wan口位址),否則還需要R7000上進行二次映射。從內到外2次NAT,從外到內2次映射,多此一舉又沒任何好處,所以直接關掉NAT就好了。


可能這裡大家可能會有疑問:為什麼R7000不用旁路由模式?其實從專業角度來講,並沒有旁路由這個概念,正確的說法應該是支持單IP混雜模式收包、轉送同時進行NAT。

一般來講,正常主機設備的網卡在正常模式的時候只會接收目標位址是網卡本身IP的包,其他的包會直接丟棄,而要想接收目標IP不是自己的包,就需要將網卡設定為混雜模式(我記得以前win上裝wireshark的時候還會提示)。

那麼要實現旁路由的功能,起碼這個設備要支援2個功能:

1.網路卡要支援混雜模式或能夠設定為混雜模式
這點所有路由器的lan埠都是預設開啟的,而linux之類的裝置可以使用指令打開,例如:

ip link set eth0 promisc on

2、支援單IP轉送並能同時進行NAT
這點家用等級的寬頻路由器就不行了,因為一般都是只能從lan口收包然後從wan口發出去並同時以wan口的地址進行NAT(好點的系統還有個是否進行nat的開關,一般的連nat都是寫死的,關不了)。

而這點對linux就根本不是個事了,要知道iptables的forward鏈就是用來幹這個事情的,如果linux上有2塊ip是不同網段的網卡且開啟了forward,直接就變身成一台三層交換器(當然,交換性能另說),而如果只有一個網卡的話,開啟轉發再開IP偽裝(就是nat),直接就變成了現在的所謂單臂旁路由。


第一次優化

這種結構幾年,其實到也沒什麼問題,只不過我經常折騰R7000:梅林刷新固件、shadowsocks升級,不正常了就重啟一下R7000,重啟的時候就會導致網絡中斷,非常不爽,加上我也還是想主路由和所有客戶端在一個網段,方便網絡喚醒之類的操作,所以想了想,打算換一種網絡結構,加上當時R7000已經屬於老型號了,梅林固件和科學插件支援都不太好,所以就狠心換成了華碩AC66uB1:

image.png

然後第二次變更網路結構後變成這樣:

image.png

這種結構的好處就是主路由所有用戶的預設閘道指向愛快的lan口位址即可,至於那些需要科學的用戶,只需要在愛快上設定埠分流或網域分流:
image.png

image.png

把對應的用戶來源IP位址或特定網域的存取指向愛快wan3口上即可,同時,AC66uB1就算死機故障或科學出問題也不會影響所有客戶端的正常的網路存取(同樣,愛快上也可以關閉wan3口的NAT,不過附帶的需要在AC66uB1上加入到內部網路的回程路由)。

但是,這種結構也有缺點,就是有一重撥號是放在AC66uB1上,沒有3重撥號都在愛快上時那樣方便運維和流量的負載,並且如果要從wan3口進行端口映射,必須在AC66uB1上配置,不太方便。不過總的來說,還是利大於弊的。

第二次優化

又過幾年,我越來越覺得上圖這種接法很彆扭,強迫症很難受,又想繼續優化,於是,路由器順便升級到現在的AC86u:

image.png

然後經過第三次網路結構調整後,變成下面這樣:

image.png

這種結構的好處是撥號全部統一回到了愛快上,3條鏈路的上行都可以方便的利用起來,同時客戶端依舊只需要將默認網關指向愛快,依舊由愛快基於源IP或者目標網域名稱將需要科學的客戶端流量從wan3口發送到AC86u的lan口(需要啟用NAT,愛快默認所有wan口發出的數據都是啟用了NAT的),而AC86u的wan口接回內網(也必須開啟NAT)。這種部署方式也依舊保留了AC86u死機或科學中斷也不會影響所有客戶端的正常上網的優點,這就是雙硬體路由時的最佳拓樸結構了。

另:由於wan1口單線3撥,還省出了一個wan2口可以連IPTV,所以就隨便把IPTV功能從梅林上移到了愛快,這下強迫症舒服了,關鍵把梅林上的功能進一步單一化,可替代性也更強了。關於愛快上設定IPTV,請參閱文章:愛快軟路由系列實現電信IPTV全媒體播放

最終優化

但是,這個結構我依舊覺得有點不爽:第一,華碩路由器那麼貴的價格,很大一部分是在路由器的wifi上,但是我wifi是用的netgear的mesh,所以華碩路由器的wifi我是完全浪費的;第二,現在正常上網的大流量又不經過AC86u,路由器最主要的作用是科學,所以對性能要求其實也不算大,這種情況下其實隨便跑個虛擬化設備已經完全可以了,為了科學一年365天多開一個硬體從電費上考慮怎麼想怎麼不划算;第三,萬一壞了難不成我還要再去買?以前用是有歷史原因,還情有可原,再買就太low了啊,所以我才開始折騰openwrt(參考我前2篇文章:OpenWrt軟路由系列PVE部署OpenWrt(23.05.2)詳細教學OpenWrt軟路由系列必裝軟體3劍客:openclash+sftpserver+tailscale安裝教學課程)。

然後就有了最終方案:

image.png

其實就是用PVE上的一個虛擬機器來跑openwrt,取代AC86u,當然,openwrt上需要先進行相關配置,有以下幾個要點:
1.openwrt硬體需要雙網卡(預設只有一個,需要新增一個):
image.png

2、openwrt上正確配置接口
image.png

image.png

3、正確配置防火牆區域

這裡的lan區域和wan區域和通常情況下的有點不太一樣,因為通常情況下流量只從lan口進,wan口出並進行nat,而我這種結構下lan和wan都有流量進入,區別只是lan口是專門給愛快用的,wan口是給內網用戶使用的(不是用來設定預設網關,而是給內網用戶用來存取openclash自帶的socks5和http代理)。

對於iptables來講,它只看網卡區域對應的input鏈、output鍊和forward鏈的配置,而我這種結構下防火牆區域設定如下:

image.png

用戶端設定預設網關的兩種方式

1.用戶預設閘道指向openwrt的lan口IP(不推薦)

對於內網用戶而言,如果直接把預設閘道指向openwrt的wan口IP,所有的非本網段的流量都會直接到達openwrt(包括需要科學的流量),openwrt直接就根據已有的策略來處理需要科學的流量,不需要科學處理的流量被openwrt直接nat後發送到愛快的lan口進行正常上網流量的處理,這就是通常所謂的單臂旁路由模式。這種部署方式主打一個簡單粗暴,好處沒多少,壞處倒是一大堆:一旦openwrt死機,則所有網關指過來的客戶端都無法上網;openwrt部分性能都用在轉發和nat不需要科學的流量上,而需要科學的流量反而耗費的性能很少;如果主路由愛快上做了端口映射到客戶端,而客戶端的默認網關又指向了openwrt,可能會導致openwrt給客戶端發送ICMP重定向等等。

2.用戶預設閘道指向愛快的lan口IP(強烈推薦)

內網用戶預設閘道指向愛快的lan口位址,則愛快就可以根據分流策略把需要科學的用戶請求通過wan3口發到openwrt的lan口,然後openwrt再根據已有的策略來處理科學流量,雖然多了愛快這一步分流操作,但是卻帶來了客戶端不用改網關、科學設備故障也不影響正常上網、方便新linux系統一步科學等天大的好處(想想一個新裝的linux系統apt下不動軟體;要去修改設定檔改ip卻沒有vim,vi用著想吐;想ssh訪問卻下不動openssh server等等尷尬的事情,有了愛快介入後只需要在分流設定裡將這個新系統ip往openwrt一丟就解決了),是個正常人都知道選後面一種了。

而我要從AC86u上割接到openwrt的時候的時候,任何配置都不用動,只需要把原來愛快wan3口直連AC86u lan口的網線拔下來接到局域網交換機上即可(前提是openwrt lan口的ip位址和AC86u的lan埠位址是一樣的)。

另:其實這裡也不是非要使用愛快做主路由才能做,任何支援多wan口以及策略路由的:例如基於來源IP位址選路、支援基於網域選路的都可以,只不過我暫時還沒看到在分流選路這快能和愛快比的,愛快這塊太強了。

總結

其實,最終的部署方案最重要的是思路,也不一定非要硬體或非要虛擬機(例如可以用硬體獨立部署的愛快裡使用虛擬機裝openwrt;又比如esxi同時裝愛快和openwrt;也可以像我一樣愛快是硬件,openwrt是虛擬機部署等等),最關鍵是愛快和openwrt之間的連接邏輯(可以是物理連接,也可以是透過vswitch虛擬連接),大家可以根據自己的實際環境靈活選擇適合自己的方案。

部落格內容均係原創,轉載請註明出處!更多部落格文章,可以移步至網站地圖了解。部落格的RSS位址為:https://blog.tangwudi.com/feed,歡迎訂閱;如有需要,可加入Telegram群一起討論問題。

評論

  1. zacharyren
    Windows Chrome 130.0.0.0
    2 個月前
    2024-11-07 0:25:39

    您好,我按照您的方案做了部署,正常上網什麼的也沒問題,但是我還想用openwrt上安裝tailscale,安裝好了之後發現節點無法連接內網中的其他設備

    • 部落客
      zacharyren
      Macintosh Chrome 130.0.0.0
      2 個月前
      2024-11-07 4:58:44

      我就是在openwrt上安裝了tailscale,用起來沒問題。 「節點無法連接內網中其他設備”,我沒看懂是是什麼意思,這個」無法連接」是指openwrt無法主動ping通區域網路裡其他設備,還是指區域網路裡其他設備無法ping通openwrt?安裝tailscale的節點可以在終端機上使用指令”tailscale」指令設定一些功能,例如是否允許區域網路連接,你可以看看。

      • zacharyren
        tangwudi
        Windows Chrome 130.0.0.0
        已編輯
        2 個月前
        2024-11-07 9:56:08

        我的設備都接入了tailscale網絡,網段是100.64.1.0/24,按理說openwrt加入tailscale之後,–accept-routes=true –advertise-routes 192.168.100.0/24有這兩個參數之後通過openwrt上網的設備也能加入tailscale網路的。但是我其他的設備只能存取100.64.1.10(openwrt),無法存取192.168.100.0/24網段,ikuai的lan網段是192.168.1.1/24,openwrt的lan口是192.168.168.1.1/24,openwrt的lan口是192.168.100.0/24,pvepve是192.168 .100.10,ikuai甚至無法ping通100.64.1.1(headscale和derp伺服器),pve和其他設備能ping通100.64.1.1,但是100.64.1.1無法ping通192.168.100.1,192.168.1無法ping通10.100.

        • 部落客
          zacharyren
          Macintosh Chrome 130.0.0.0
          已編輯
          2 個月前
          2024-11-07 10:20:44

          你這沒拓樸圖,光說IP位址段實在是不好聯想,不過我猜你的意思是其他部署了tailscale的設備無法存取到openwrt的lan口所在的192.168.100.0/24網段吧?這種靠tailscale來進行網段的路由我倒是沒有實際做過,因為有需要互訪的設備都安裝了tailscale,沒這個需求。不過,我覺得一個關鍵應該是在其他部署了tailscale的設備上是否能看到到通往192.168.100.0/24網段的路由,並且網關應該指向100.64.1.10(openwrt)。照道理來說,如果你設定正常,advertise-routes也正確設置,其他部署tailscale的裝置上應該是能看到的,這是能和192.168.100.10/24網段通訊的基礎。另外:–accept-routes=true在其他tailscale設備上設定沒?

          • zacharyren
            tangwudi
            Windows Chrome 130.0.0.0
            2 個月前
            2024-11-07 10:28:37

            我之前部署的時候只要在openwrt上加入–accept-routes就行了,其他tailscale設備也需要開啟這個參數嗎?我回去試試

          • 部落客
            zacharyren
            Macintosh Chrome 130.0.0.0
            2 個月前
            2024-11-07 10:31:56

            “–accept-routes”,這個開關我覺得應該是控制是否接受其他tailscale節點通告的路由。

          • zacharyren
            tangwudi
            Windows Chrome 131.0.0.0
            2 個月前
            2024-11-26 15:59:16

            大佬您好,我又碰到問題了。 。 。我現在的ipv6很奇怪,區域網路內都是正常的,網路上能ping通,但是無法透過ipv6存取連接埠服務,這樣看來應該是防火牆問題,但是我把openwrt的防火牆都關了,ikuai的也開了。光貓上也沒看到防火牆的設置,但還是沒用

          • 部落客
            zacharyren
            Macintosh Chrome 131.0.0.0
            2 個月前
            2024-11-26 21:42:49

            遇到這種問題,就需要在愛快上進行抓包來確認外網ping過來的包到底有沒有到達愛快的wan口了,如果到達了裡面卻收不到,就可以確認是IPv6防火牆的問題。

  2. 鏡面王子
    Android Chrome 120.0.0.0
    8 個月前
    2024-5-31 9:44:57

    我想問eth0 與eth1在新版openwrt中已經沒有了,只有br-lan,還有以太網適配口wan,交換機接口eth0,需要怎麼設定呢,是最後的那個方案,我估計你的openwrt內核版本是在5.5以下的吧?

    • 部落客
      鏡面王子
      iPhone Chrome 125.0.6422.51
      8 個月前
      2024-5-31 10:00:32

      直接在虛擬機器裡加入網路卡,然後在openwrt 裡設定就行了啊,預設本來就只有一個eth0,多的肯定都是自己加的。 。至於交換機,啥都不用配,一個廣播域裡本來就可以跑多個網段,只是一般來說不建議這麼搞,生產環境廣播包會互相影響,但是自己控制的網路就不怕。

  3. tb
    Macintosh Chrome 123.0.0.0
    8 個月前
    2024-5-27 18:13:06

    多謝部落客啊,給了一個好思路解決單臂路由配置統一的問題。
    然後有一個小建議:可以把openwrt安裝到愛快的虛擬機器裡面,再配合愛快端口分流的下一跳策略可以實現看起來更自然的協作了。
    2個好處:

    1. openwrt裝愛快裡面,愛快設備跟nas物理隔離,將來nas出問題或自己重裝折騰不影響科學;
    2. 愛快的跨三層應用配合openwrt的SNMPD服務,可以實現更詳細的終端流量統計。
    • 部落客
      tb
      Macintosh Chrome 125.0.0.0
      已編輯
      8 個月前
      2024-5-27 19:48:00

      我之前愛快也裝了虛擬機器的,不過後來專門買了一台inter cpu的mini主機來安裝pve之後,所有的虛擬機器、docker都遷移過去了,這樣便於運維管理。

      我愛快現在只讓它專心的做出口設備(是單獨買的一個工控機,不是在nas裡),一來因為以前跑虛擬機的時候愛快的cpu風扇吵得我心煩,二來因為我愛快是3撥,每條連結都有自己作用,論重要性比可openwrt大太多了,真裝一起我反而擔心openwrt影響我的愛快~~。況且,openwrt其實只是我的備用設備,我現在主要用的還是AC86u,我弄個openwrt是因為有段時間科學不穩定,我無法確定是ac86u的問題還是科學本身的問題,所以裝個openwrt來做備用測試手段。

      • tb
        tangwudi
        Macintosh Chrome 123.0.0.0
        8 個月前
        2024-5-28 10:28:47

        剛好問一下哈,加了連接埠分流策略,如果openwrt掛了,會影響分流的設備正常使用嗎

        • 部落客
          tb
          Macintosh Chrome 125.0.0.0
          已編輯
          8 個月前
          2024-5-28 11:08:21

          取決於」線路綁定」那個選項你是否勾選,不過,我感覺這個選項的判斷邏輯很可能比較粗糙,可能是靠上級網關是否可達或者線路接口是up還是down(畢竟沒有具體的選項,我只能靠常規邏輯來判斷),根據不同的判斷邏輯還有你的openwrt怎麼個掛法(比如掛得完完全全,ping接口地址都ping不通,還是掛得半死不活,比如ping接口能ping通,但是實際上已經不行了),最後的實際效果未必能如你的願,所以這也是我把愛快和openwrt分離的原因之一,不管openwrt死活,愛快主路由不能受任何影響,畢竟在在我的」家庭資料中心」方案中,愛快能穩定的正常工作是重中之重。

發送評論 編輯評論


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ°Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
顏文字
Emoji
小恐龍
花!
上一篇
下一篇
       

本站已停用滑鼠右鍵和各種快捷鍵,程式碼區塊內容可以直接在右上角點擊複製按鈕進行複製

zh_HK