為什麼在使用 ip6tables 一段時間後,我在 IPv6 上失去了與主機的連接?
我正在使用 Debian 9 AMI 在 EC2 實例上試驗
ip6tables
(版本1.6.0),我注意到一段時間後我失去了與 IPv6 地址上的伺服器的連接,而我仍然可以訪問 IPv4 地址上的伺服器,當然我有安全組設置為允許 IPv4 和 IPv6 上的所有流量,包括 ICMP。我正在將
INPUT
鏈的預設策略設置為DROP
並允許特定埠或 IP 地址和所有 ICMP 流量,並且我正在嘗試從 AWS 之外的其他主機(來自 Linode 和 DigitalOcean)ping 伺服器,一段時間後所有數據包停止到達 EC2 實例,我也在埠80、8080和5555上執行 3 個 nginx 服務,埠8080和5555是 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
中的數據包數量增加雖然錶鍊中PREROUTING
的nat
數據包沒有增加,但我也沒有在表中設置任何規則。INPUT``nat``nat
Chain PREROUTING (policy ACCEPT 396 packets, 35498 bytes)
此外,我安裝了完全不使用
ip6tables
的 Docker,我嘗試停止 Docker 容器並禁用 Docker 守護程序並刷新iptables
Docker 設置的規則,但沒有任何運氣,一段時間後會發生同樣的問題。我正在嘗試在 3 個不同
ping
的curl
伺服器上: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 地址上伺服器的連接。