双栈Linux路由器,无法转发IPv6前缀

双栈Linux路由器,无法转发IPv6前缀

我在这里有一个小办公室,里面有几个工作站,我想实现一个小型服务器,用于代理服务器、samba 等。这是所述网络的拓扑结构:

+-----+   dynamic    +--------+        +-------------------+                 +--+workstation1
|     |  /56 prefix  |        |        |   Debian server   |        +--------+
| ISP +--------------+ Router +-+eth0+-+                   +-+eth1+-+ switch +--+workstation2
|     |   dynamic    |        |        | (squid,dhcp,etc.) |        +--------+
+-----+ IPv4 address +--------+        +-------------------+                 +--+workstationX

我希望服务器为通过交换机连接到 eth1 的所有设备分配全局(也可能是本地)IPv6 地址和私有 IPv4 地址。我能够使用 dnsmasq 和 iptables 实现 NAT 伪装,但我无法让 IPv6 流量甚至分发 IPv6 地址。路由器在 IPv6 DHCP 服务器选项卡中有三种不同的设置:

  • 仅分配 DNS 服务器
  • 为下游路由器分配 DNS 服务器和 IPv6 前缀(我认为应该启用
  • 为下游路由器分配 DNS 服务器、IPv6 前缀和 IPv6 地址

我尝试过本指南。它描述了如何使用 dnsmasq 设置 DHCPv6 服务器。我有一个正常工作的 eth0,它获得一个全局、唯一本地和链接本地地址。但我的 eth1 接口从未获得全局 IPv6 地址,只有链接本地地址。服务器后面的设备都有一个有效的 IPv4 地址,但我无法将 IP 设置为静态,因为前缀是动态的并且每晚都会更改。目前我被困在这一点上。

这里是我的配置文件。

感谢您的帮助。

答案1

您需要为分配一个 IPv6 地址,eth1因为它无法自动配置。/64从您的中选择一个地址/56,尽管您可能能够使用您的。我在下面的示例中/56使用了前缀。2001:0db8:a1b2:c2d3::/64

# This is an IPv6 interface
iface eth1 inet6 static
    address  2001:0db8:a1b2:c2d3::1
    netmask  64

答案2

我找到了方法。我的接口 eth0 获得了它的 IP,因为启用了 net.ipv6.conf.eth0.accept_ra=2。wide /etc/sysctl.conf-dhcpv6-client 尝试再次设置 eth0 地址,但它已被路由器广告设置。因此,如果您希望 wide-dhcpv6-client 仅将 ip 设置为内部接口(eth1在我的情况下),您必须省略

id-assoc na 1 {
    # id-assoc for eth1
};

部分来自已发布的教程。否则,dhcp6c 在看到该地址已被使用后将停止。

这是我的 dhcp6c.conf 现在的样子

interface eth0 {
        send ia-pd 1;
        request domain-name;
        request domain-name-servers;
        script "/etc/wide-dhcpv6/dhcp6c-script";
};

id-assoc pd 1 {
        prefix ::/64 infinity;
        prefix-interface eth1 {
                sla-len 0;
                sla-id 1;
                ifid 1;
        };
};

现在一切都运行正常。我希望这些信息能帮助任何遇到类似问题的人。

相关内容