如何通过GCE防火墙允许protocol-41(6in4)?

Tim*_*hig 7 ipv6 tunnel google-compute-engine

作为Google支持Google Compute Engine上的原生IPv6之前的一个障碍,我想配置一个6in4(IP协议41)隧道.

我添加了防火墙规则以允许我的VM网络上的协议41:

Name        Source tag / IP range  Allowed protocols / ports  Target tags
allow-6in4  216.66.xxx.xxx         41                         Apply to all targets
Run Code Online (Sandbox Code Playgroud)

并配置隧道/etc/network/interfaces:

auto 6in4
iface 6in4 inet6 v4tunnel
  address 2001:470:xxxx:xxxx::2
  netmask 64
  endpoint 216.66.xxx.xxx
  gateway 2001:470:xxxx:xxxx::1
  ttl 64
  up ip link set mtu 1280 dev $IFACE
Run Code Online (Sandbox Code Playgroud)

并且ping6 2001:470:xxxx:xxxx::1验证了6in4流量是出站的:

$ sudo tcpdump -pni eth0 host 216.66.xxx.xxx
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
22:52:03.732841 IP 10.240.xxx.xxx > 216.66.xxx.xxx: IP6 2001:470:xxxx:xxxx::2 > 2001:470:xxxx:xxxx::1: ICMP6, echo request, seq 1, length 64
22:52:04.740726 IP 10.240.xxx.xxx > 216.66.xxx.xxx: IP6 2001:470:xxxx:xxxx::2 > 2001:470:xxxx:xxxx::1: ICMP6, echo request, seq 2, length 64
22:52:05.748690 IP 10.240.xxx.xxx > 216.66.xxx.xxx: IP6 2001:470:xxxx:xxxx::2 > 2001:470:xxxx:xxxx::1: ICMP6, echo request, seq 3, length 64  
Run Code Online (Sandbox Code Playgroud)

我暂时将端点更改为可以运行tcpdump的地址,并确认数据包未到达目的地.我甚至尝试过NAT,以防GCE没有为6in4数据包执行此操作,但没有运气(iptables -t nat -A POSTROUTING -p ipv6 -j SNAT --to-source 130.211.xxx.xxx).

有没有人有一个6in4隧道在GCE VM上工作?我错过了某些神奇的场景吗?

Bar*_*row 5

TL; DR:你不能.

每个网络和防火墙:

除非通过协议转发明确允许,否则将阻止使用TCP,UDP和ICMP以外的协议的流量.

每个协议转发:

Google Compute Engine支持以下协议的协议转发:

AH:指定IP认证头协议.

ESP:指定IP封装安全有效负载协议.

SCTP:指定流控制传输协议.

TCP:指定传输控制协议.

UDP:指定用户数据报协议.

因此,协议转发规则需要用于以下IP协议号之一:

  • 51(AH)
  • 50(ESP)
  • 132(SCTP)
  • 6(TCP)
  • 17(UDP)

协议转发页清楚地表明其他协议号,如41(6in4隧道技术)不支持:

注意:这是支持的协议的详尽列表.协议转发仅支持此处显示的协议.

  • 看起来谷歌云平台仍在使用石器时代的基础设施。没有本地 ipv6,甚至不允许隧道。 (2认同)