Dav*_*idG 4 linux router ipv6 radvd
我正在尝试让我的家庭 Linux 路由器也支持家庭网络上的 ipv6。
我有一个 NVG599 DSL 路由器充当公共互联网的 GW,然后我的 Linux 路由器有两个接口:eth0 指向家庭网络,eth1 指向 DSL 路由器。
家庭网络<----eth0-----> LinuxRouter <------eth1------>DSLrouter -->>>>>
DSL 路由器配置了来自我的 ISP 的 /64 网络前缀(假设它是 2001:0:0:1234::/64)并且 DSL 路由器的 ipv6 全局地址为 2001:0:0:1234::1 . 我已经使用 radvd 设置了 Linux 路由器,以将这个相同的 /64 网络前缀通告给家庭 LAN 的 eth0,并且确实我看到 LAN 上的主机能够自动配置它们的 IP 地址。该广告还将 Linux 路由器列为 ::/0 的默认路由器,并设置了转发,以便将数据包发送到 DSL 路由器。
我遇到的问题是,当 DSL 路由器从 Internet 获取入站数据包时,它会在 eth1 上发送邻居请求数据包,而这些邻居请求没有从 Linux 路由器上的 eth1 -> eth0 传递。我认为这是因为 DSL 路由器认为它直接连接到家庭网络(这是在 99% 的家庭网络中通常情况下没有中间有 Linux 路由器的情况)。
在花了 2 天的时间试图弄清楚之后,到目前为止,我还没有得到答案。我希望有某种方法可以使用 radvd 将路由器广告发送到 DSL 路由器,以告诉它通过 Linux 路由器路由 /64 前缀的所有数据包。目前,Linux 路由器发送的路由器广告配置了 /64 前缀,该前缀将发送至 DSL 路由器,其中:
interface eth1
{
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
route 2001:0:0:1234::/64 {
};
};
Run Code Online (Sandbox Code Playgroud)
我认为这应该足以让 DSL 路由器将所有数据包转发到网络,但我仍然看到邻居请求。
我看到 DSL 路由器具有 IP 直通设置,能够设置“默认服务器”,但这些似乎仅适用于 IPv4。假设 DSL 路由器不支持我的 RA,我想我可以在 Linux 路由器上使用“xorb”设置 ipv6 多播转发,但想知道是否还有其他选项。
我遇到的问题是,当 DSL 路由器从 Internet 获取入站数据包时,它会在 eth1 上发送邻居请求数据包,而这些邻居请求没有从 Linux 路由器上的 eth1 -> eth0 传递。
这是正常的。邻居请求就像 ARP 查询一样工作——它们将 IP 地址转换为 MAC 地址,因此它们只在同一个广播域内有意义。路由器转发它们是没有意义的。
(尽管在某些情况下,路由器可以代理它们,如最后所述,但是...将其留给计划 C。)
我认为这是因为 DSL 路由器认为它直接连接到家庭网络(这是在 99% 的家庭网络中通常情况下没有中间有 Linux 路由器的情况)。
是的,你从来没有告诉过它。
因此,您目前的情况是两个不同的网络正在使用相同的IP 子网,并且您希望 Linux 路由器充当网桥……这几乎与路由器完全相反。
(如果令人困惑的部分是 IPv6,请考虑 IPv4 术语中的整个设置,因为两者的路由或多或少相同,而 ND 大部分相当于 ARP。因此,如果您不使用相同的 192.168.1.0 子网v4...)
您最好的做法是获取第二个/64,并将其用于 Linux 路由器的 eth1 网络。(如果 DSL 路由器通过 DHCPv6-PD 获得其前缀,则可能会诱使它请求第二个。)但不同之处在于第二个 /64 不会直接在接口上使用,而是路由到Linux 路由器的地址。
例如:
(为不太清楚的例子道歉。)
有时 ISP 将整个 /60 甚至 /56 委派给您,并将其全部路由到 DSL 路由器。在这种情况下,您可以在没有任何 DHCPV6-PD 魔法的情况下设置第二个子网。真的,虽然我无法在这里提供一个好的“通用”答案,因为它既依赖于 ISP 又依赖于 CPE。
如果无法获得第二个 /64 前缀,其他可能的选择是:
将 Linux 系统变成一个纯粹的桥梁,没有任何路由功能。
使用其他来源获取额外的 /64,例如隧道提供者(或 6to4)。现有的隧道服务将比下面描述的黑客更可靠地工作(除了一些额外的延迟)。
使 DSL 路由器只获取 /64 而不是为 LAN 配置它。(取决于路由器的灵活程度。)相反,再次通过 Linux 系统的 eth0 链路本地地址为该 /64 设置路由,同样通过 DSL 路由器的 ::/0 在 Linux 系统上设置路由LAN 链路本地地址。因此,/64 将仅用于第二个子网,而第一个子网根本没有任何公共前缀。
继续您当前的设置,但安装“ndppd”以执行邻居发现代理。(不,多播转发不起作用,因为 ND 数据包通常具有链路本地源地址。)小心这一点,它会使事情变得非常混乱。
对第二个 LAN 使用私有 (ULA) 地址,并在 Linux 路由器上启用一对多 NAT(伪装)...在此过程中失去了 IPv6 的大部分用处。(是的,正式的 NAT 在 IPv6 中不存在,但这并没有阻止 Linux netfilter/iptables 放弃并实施它。)
归档时间: |
|
查看次数: |
4291 次 |
最近记录: |