最近因為CENTOS 7 辦事會莫名的封閉,查了發現是KENERL問題,所以決定升到CENTOS 8-9,
我的INTEL雙網網卡 來當作家裡的firewall, 於是安裝了CENTOS 8 - 9, 並用pppoe 來連接中華電信的Router, 而且寫了一些iptables 的rules 來當作firewall 及NAT router.
可是感覺有問題, 有時連不出去. 現象是如許的:
可是在NAT 後面的電腦,GOOGLE PTT網站 連線都很ok, , 只要碰上yahoo跟遊戲 的連線, 就連不上, ftp 也ok.
這問題擺了很久都沒去理睬. 今天終於有空好好的來追問題的泉源. 發現仿佛是跟pppoe 有關.
問了小洲大大才發現
MTU
MTU (Maximum Transmission Unit) 是指網路介面卡上最大傳輸單位, 其單元為bytes. 在大大都的Ehternet 上, 這個值平常是1500. 因為如斯, 在PPPoE 中, 因為還有header問題, 所以這個值就得設的對照小, 每每為1492 (= 1500 – 2(PPP)- 6(PPPoE))
MSS
MSS (Maximum segment size) 是TCP protocol 中的一個參數, 是指TCP 每次資料傳輸分段的最大值. 當TCP 在handshake 時, 雙方host 會查看MSS 這個欄位, 來決意兩邊資料傳輸分段的巨細. 在Ethernet 中MSS 值最大為1460 bytes.
緣由是在Ethernet 中 MTU = IP Header + TCP Header + MSS + FCS.
(FCS 是指Frame check sequence, 平日採用CRC演算法, 在Ethernet 中, 它佔4 bytes.)
可是在PPPoE 中MTU 為1492, 所以其MSS 只能設為1452.
問題所在
當CENTOS 8 在開機後, 啟動了ppp0, 其內定將MTU 設為1492, 並且會自動設定一條iptable rule,
因為在NAT 後面的電腦, 其實不知道前真個router 是用什麼介面連到internet, 所以它和遠真個電腦建立TCP 連線時, 有可能會將MSS 設為1460. 但是由於firewall 或router 端利用PPPoE連線, 若MSS 大於1452會造成資料爆掉, 所以上述的iptable rule 強迫偷改其MSS值(在IPV4下 = PMTU – 40, 在IPV6下 = PMTU – 60). 是以MSS 就會被改成1452, 如許子就不會爆掉了.
然則我本身寫的iptable rule script 中, 一起頭就用了以下設定, 消滅了本來的所有設定
網站架設
設建都消滅掉了, 然後NAT 後面的電腦仍是無法正常連線.
解決體式格局
既然知道原因, 解法就很簡單, 就是在我自己的iptable rule 中再加上
就搞定了!!
參考文章
留言列表