《黑色行動冷戰》及《現代戰域》第一季即日起推出   Street FighterV最後的Season V啟動!另外還有「服裝設計比賽」!   在《The Sims 4 Star Wars:巴圖星之旅》實現你的星際大戰夢想   日本首次VALORANT職業循環賽「VALORANT Mildom Masters」開始!   BCT推全港首個模擬MPF投資遊戲 透過BCT e旅程推廣投資者教育   三國志14推出燒酒!?薩洲濱田屋傳兵衛的道地燒酒在遊戲中登場!   準備在《Godfall》展開任務!遊戲下週登陸PlayStation 5   《KINGDOM HEARTS Melody of Memory》發售日確定!還有Nintendo Switch版才有的功能! 

Linux 遇到 nf_conntrack: table full, dropping packet 解法

系統平常跑得很正常,為何灌了 Docker 後,dmesg 開始出現下述的訊息:

要怎麼解決呢?

Linux 遇到 nf_conntrack: table full, dropping packet 解法

主要是問題在於 Docker 灌了後,預設會開啟 nf_conntrack 追蹤功能(因為 Docker 系統內部都是走 NAT,想要追蹤每個連線,不過這不是必要的),而追蹤連線的條數越來越多(量大的話),來
不及消耗掉,就會滿載,滿載就會出現此訊息。

先講我的解法

  1. sudo iptables -A FORWARD -m state –state UNTRACKED -j ACCEPT
  2. sudo iptables -L # 確認有此 “ACCEPT all — anywhere anywhere state UNTRACKED” 行
  3. 若上述執行太多次,會顯示很多行,可以用下述刪除
    • sudo iptables -D FORWARD -m state –state UNTRACKED -j ACCEPT

此篇文章列了幾種解法:解決 nf_conntrack: table full, dropping packet 的幾種思路

  1. 移除 nf_conntrack 模組
    1. 移除前先注意 iptables 有沒有使用到 state 模組的規則
      • ex: -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
    2. sudo modprobe -r xt_NOTRACK nf_conntrack_netbios_ns nf_conntrack_ipv4 xt_state
    3. sudo modprobe -r nf_conntrack
  2. 調整 /proc conntrack 等等的數字 (/etc/sysctl.conf),增加 CONNTRACK_MAX 與 HASHSIZE 的值 並且縮短 timeout 值
    • $ sudo su -c “echo 100000 > /proc/sys/net/netfilter/nf_conntrack_max” #
    • $ sudo su -c “echo 50000 > /proc/sys/net/netfilter/nf_conntrack_buckets”
    • $ sudo su -c “echo 600 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established”
    • vim /etc/sysctl.conf # 增加下述
      • net.netfilter.nf_conntrack_max = 655350
      • net.netfilter.nf_conntrack_tcp_timeout_established = 1200
    • $ sudo sysctl -p
  3. 使用 raw 表,不跟蹤連接
    • $ sudo iptables -A FORWARD -m state –state UNTRACKED -j ACCEPT
    • $ sudo iptables -t raw -A PREROUTING -p tcp -m multiport –dport 80,81,82 -j NOTRACK
    • $ sudo iptables -t raw -A PREROUTING -p tcp -m multiport –sport 80,81,82 -j NOTRACK
  4. 註:上述解法建議挑 1、3。2 的解法治標不治本,量大一樣會有問題

相關網頁

相關文章