我正在为 Hurricane Electric 的 IPv6 隧道代理设置我的计算机(运行 Debian Buster)。他们提供了几种配置方法的说明,但这里是 iproute2 的说明,我一直将其用于测试目的:
ip tunnel add he-ipv6 mode sit remote 216.66.22.2 local <local-IP-addr> ttl 255
ip link set he-ipv6 up
ip addr add <IPv6-addr>/64 dev he-ipv6
ip route add ::/0 dev he-ipv6
ip -f inet6 addr
当我这样做时,sit0
还会出现一个神秘的界面。显然,这与 6in4 隧道相关,但除了以下内容之外我找不到更多相关信息这有点特别和sit
每当模块加载时它就存在。出于好奇,我尝试为隧道代理配置它,而不是创建新接口,但它似乎无法做到这一点。
这个装置是什么?
答案1
根据我找到的信息这篇来自红帽的博文,我想我明白了目的。 (我不是 Linux 网络专家,所以如果任何知识渊博的人发现任何错误,请随时在评论中纠正我或发布您自己的答案。)
首先,一些背景:
设备sit
是一种虚拟网络设备,它获取 IPv6 流量、将其封装/解封装在 IPv4 数据包中,并通过 IPv4 Internet 将其发送/接收到另一台主机(例如 IPv6 隧道代理)。外部数据包有一个特殊的协议号:41。(这类似于端口号,但在 IP 层而不是 TCP/UDP 层。)
发送相当简单:
sit
设备具有与其关联的本地和远程 IPv4 地址,这些地址成为外部 IPv4 标头中的源地址和目标地址。 (源地址也可以是“任意”或 0.0.0.0,在这种情况下,Linux 将根据发送封装数据包的 IPv4 接口为您选择一个源地址。)接收只是稍微复杂一些:当协议 41 数据包到达时,Linux 需要确定
sit
它属于哪个设备。它通过查看数据包的外部 IPv4 源地址和目标地址来完成此操作。它将这些地址与每个设备的本地和远程地址进行比较sit
,匹配的设备就是获取数据包并将其解封装的设备。
如何sit0
发挥作用:
您可能想知道当 Linux 收到与任何设备都不匹配的协议 41 数据包时会发生什么sit
(例如,它来自某个随机地址)。在这种情况下,它被传递到sit0
。
sit0
是由内核模块设置的特殊“后备”设备,sit
用于处理这些数据包。它的本地和远程地址设置为 0.0.0.0(即“任意”),并且它没有附加到任何特定的物理设备,因此它将接受任何其他设备尚未处理的协议 41 数据包sit
。
这有用吗?也许在特定情况下,但我想在绝大多数情况下,您会希望丢弃此类数据包。我不知道为什么不让管理员决定是否应该创建这样一个包罗万象的设备。也许有一些历史原因。