我正在 IPv6 上进行测试。A 是 Cogent colo 中的一台服务器,具有原生 IPv6,称为 2001:db8:1111::1。B 是一台 Mac mini,位于 ISP Comcast 后面的 Airport Extreme 路由器后面;路由器设置为使用任播 6to4,B 就是 2002:c000:202::2。
在 B 上,ssh 2001:db8:1111::1
工作正常。
在 A 上,ssh 2002:c000:202::2
超时。(对于任何其他 TCP 连接也是如此。)tcpdump -nnvvvSs0
在 B 上运行时,我可以看到来自 A 的 SYN 数据包可以顺利到达 B,但从 B 返回到 A 的 SYN-ACK 数据包被告知“目标不可达,禁止不可达”:
12:16:42.266203 IP6 (hlim 51, next-header TCP (6) payload length: 40) 2001:db8:1111::1.43263 > 2002:c000:201::2.22: Flags [S], cksum 0x6c79 (correct), seq 102729844, win 5760, options [mss 1440,sackOK,TS val 749393277 ecr 0,nop,wscale 7], length 0
12:16:42.266330 IP6 (flowlabel 0xb4ac1, hlim 64, next-header TCP (6) payload length: 44) 2002:c000:202::2.22 > 2001:db8:1111::1.43263: Flags [S.], cksum 0xa0e9 (correct), seq 122191294, ack 102729845, win 65535, options [mss 1440,nop,wscale 3,nop,nop,TS val 1053035827 ecr 749393277,sackOK,eol], length 0
12:16:42.403695 IP6 (hlim 51, next-header ICMPv6 (58) payload length: 92) 2001:db8:1111::1 > 2002:c000:202::2: [icmp6 sum ok] ICMP6, destination unreachable, length 92, unreachable prohibited 2001:db8:1111::1
B 可以向 A 发送 SYN 并建立连接,但 B 的 SYN-ACK 被拒绝,这确实令人震惊。我接下来应该在哪里查看为什么会发生这种情况?
编辑:以下是/etc/sysconfig/ip6tables
来自服务器 A 的数据:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d ff02::fb -j ACCEPT
#-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
#-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
#-A RH-Firewall-1-INPUT -p udp -m udp --dport 32768:61000 -j ACCEPT
#-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 32768:61000 ! --syn -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m udp -p udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
-A RH-Firewall-1-INPUT -j DROP
COMMIT
答案1
听起来你缺少如下的 ip6tables 规则:
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
答案2
更改 A 上的防火墙解决了这个问题。我们添加了
-A RH-Firewall-1-INPUT -s 2002:c000:202::2 -j ACCEPT
前
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
当 B -> A 已经起作用时,为什么还需要这样做对我来说仍然有点神秘......