1. iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
複製代碼

比來因為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 中, 一開始就用了下列設定, 消滅了本來的所有設定

 

  1. # 排除所有劃定規矩
  2. iptables -F -t filter
  3. iptables -X -t filter
  4. iptables -Z -t filter
  5. iptables -F -t mangle
  6. iptables -X -t mangle
  7. iptables -Z -t mangle
  8. iptables -F -t nat
  9. iptables -X -t nat
  10. iptables -Z -t nat
複製代碼



設建都清除掉了, 然後NAT 後面的電腦還是沒法正常連線.

解決方式
既然知道緣由, 解法就很簡單, 就是在我本身的iptable rule 中再加上



就搞定了!!

參考文章

NETYEA 網頁設計

 

arrow
arrow
    文章標籤
    網頁設計
    全站熱搜
    創作者介紹
    創作者 prassaxlpu5 的頭像
    prassaxlpu5

    湖口網頁設計

    prassaxlpu5 發表在 痞客邦 留言(0) 人氣()