Debian

為什麼在使用 ip6tables 一段時間後,我在 IPv6 上失去了與主機的連接?

  • July 1, 2018

我正在使用 Debian 9 AMI 在 EC2 實例上試驗ip6tables(版本1.6.0),我注意到一段時間後我失去了與 IPv6 地址上的伺服器的連接,而我仍然可以訪問 IPv4 地址上的伺服器,當然我有安全組設置為允許 IPv4 和 IPv6 上的所有流量,包括 ICMP。

我正在將INPUT鏈的預設策略設置為DROP並允許特定埠或 IP 地址和所有 ICMP 流量,並且我正在嘗試從 AWS 之外的其他主機(來自 Linode 和 DigitalOcean)ping 伺服器,一段時間後所有數據包停止到達 EC2 實例,我也在埠8080805555上執行 3 個 nginx 服務,埠80805555是 nginx Docker 容器的已發布埠,但這並不重要,因為我正在嘗試對所有這些埠有同樣的問題。

奇怪的是,我正在查看數據包編號,當連接失去時,丟棄的數據包編號並沒有增加ip6tables -L -xvn

Chain INPUT (policy DROP 21 packets, 2748 bytes)

但是當我將預設策略更改為ACCEPT( ip6tables -P INPUT ACCEPT) 時,它又開始工作了,我不知道這是否是巧合。

我也在nat使用 觀察表的數據包數watch -n 1 ip6tables -t nat -L -xvn,當一切正常時,鏈中的數據包數量都會增加,PREROUTING我注意到的一件事是,當出現此問題時,我可以看到鏈INPUT中的數據包數量增加雖然錶鍊中PREROUTINGnat數據包沒有增加,但我也沒有在表中設置任何規則。INPUT``nat``nat

Chain PREROUTING (policy ACCEPT 396 packets, 35498 bytes)

此外,我安裝了完全不使用ip6tables的 Docker,我嘗試停止 Docker 容器並禁用 Docker 守護程序並刷新iptablesDocker 設置的規則,但沒有任何運氣,一段時間後會發生同樣的問題。

我正在嘗試在 3 個不同pingcurl伺服器上:

ping6 HOST_IP

和:

while true; do curl http://HOST_IP:5555 --connect-timeout 10; sleep 1; done

這些是ip6tables我正在使用的規則:

-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -s IPv6_OF_ONE_OF_MY_OTHER_HOSTS -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5555 -j ACCEPT
-P INPUT DROP

我正在嘗試測試列入白名單的主機是否能夠訪問所有埠,而其他 2 台主機只能訪問埠5555

我做錯什麼了嗎?如何解決此問題?

經過一些測試,我發現了問題,當我啟用 DHCPv6 客戶端埠時,546使用:

-A INPUT -m conntrack --ctstate NEW -m udp -p udp --dport 546 -d fe80::/64 -j ACCEPT

一切都開始正常工作,我也嘗試刪除此規則以確保這是真正的問題,是的,確實,當刪除此規則時,這些數據包被丟棄,並且我失去了與 IPv6 地址上伺服器的連接。

引用自:https://unix.stackexchange.com/questions/452761