双栈linux路由器,不能转发IPv6前缀

我有一个小办公室,有几个工作站,我想实现一个像代理服务器,桑巴等东西的小型服务器。这是所述networking的拓扑结构:

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

我希望服务器通过交换机将全局(也可能是本地)IPv6地址和私有IPv4地址分配给连接到eth1的所有设备。 我已经能够获得NAT伪装与dnsmasq和iptables工作,但我无法获得IPv6stream量,甚至分配IPv6地址工作。 路由器在IPv6 DHCP服务器选项卡中有三个不同的设置:

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

我试着按照这个指南。 它介绍了如何使用dnsmasq设置DHCPv6服务器。 我有一个工作eth0获得一个全球性的,独特的本地和链接本地地址。 但是我的eth1接口永远不会得到一个全球IPv6地址,只有一个本地连接。 服务器后面的设备都有一个工作的IPv4地址,但我不能将IP设置为静态IP,因为前缀是dynamic的,并且每晚都会更改。 目前我被困在这一点上。

这是我的configuration文件。

感谢您的帮助。

您将需要为eth1分配一个IPv6地址,因为它将无法自动configuration。 从/56select一个/64地址,尽pipe你可以使用/56 。 我在下面的例子中使用了前缀2001:0db8:a1b2:c2d3::/64

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

我find了方法。 因为在/etc/sysctl.conf启用了net.ipv6.conf.eth0.accept_ra = 2,所以我的接口eth0得到了它的IP。 wide-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; }; }; 

现在一切都像魅力一样。 我希望这些信息可以帮助任何有类似问题的人。