3ro*_*nco 1 ipv6 forwarding point-to-point-protocol icmpv6
Debian 服务器具有eth0
, eth1
. eth2
,ppp0
设备:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether xx:yy:zz:yy:xx:yy brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether xx:yy:zz:yy:xx:yy brd ff:ff:ff:ff:ff:ff
4: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether xx:yy:zz:yy:xx:yy brd ff:ff:ff:ff:ff:ff
63: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qdisc pfifo_fast state UNKNOWN qlen 3
link/ppp
Run Code Online (Sandbox Code Playgroud)
到处都启用转发:
/proc/sys/net/ipv6/conf ~
all/forwarding=1 default/forwarding=1
eth0/forwarding=1 eth1/forwarding=1
eth2/forwarding=1 ppp0/forwarding=1
Run Code Online (Sandbox Code Playgroud)
并且 autoconf 也被激活:
/proc/sys/net/ipv6/conf ~
all/autoconf=1 default/autoconf=1
eth0/autoconf=0 eth1/autoconf=1
eth2/autoconf=1 ppp0/autoconf=1
Run Code Online (Sandbox Code Playgroud)
进一步RA(=路由器通告)被接受的任何装置上,而是设置accept_ra = 2
在真皮休闲ppp0
和eth1
:
/proc/sys/net/ipv6/conf ~
all/accept_ra=1 default/accept_ra=1
eth0/accept_ra=1 eth1/accept_ra=2
eth2/accept_ra=0 lo/accept_ra=1
ppp0/accept_ra=2
Run Code Online (Sandbox Code Playgroud)
PPP 连接成功建立,在/etc/ppp/peer/myProvider配置文件中设置了ipv6 ::dead:beef选项:
63: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qlen 3
inet6 2003:42:e67f:d3ca:6105:155:f2b3:71f0/64 scope global temporary dynamic
valid_lft 14266sec preferred_lft 1666sec
inet6 2003:42:e67f:d3ca::dead:beef/64 scope global dynamic
valid_lft 14266sec preferred_lft 1666sec
inet6 fe80::dead:beef/10 scope link
valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)
并且设置了到提供者的链路本地地址的默认路由:
2003:42:e67f:d3ca::/64 dev ppp0 proto kernel metric 256 expires 13559sec
fe80::/64 dev ppp0 proto kernel metric 256
fe80::/10 dev ppp0 metric 1
fe80::/10 dev eth1 proto kernel metric 256
fe80::/10 dev ppp0 proto kernel metric 256
fe80::/10 dev eth0 metric 1024
default via fe80::90:1a10:1b2:b780 dev ppp0 proto kernel metric 1024 expires 1789sec
Run Code Online (Sandbox Code Playgroud)
公共2003:42:e67f:d3ca::/64
前缀具有到ppp0
设备的路由。
radvd安装并运行,radvdump显示ppp0
发送RA的IPv6 链接
interface ppp0
{
AdvSendAdvert on;
# Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
AdvManagedFlag off;
AdvOtherConfigFlag on;
AdvReachableTime 0;
AdvRetransTimer 0;
AdvCurHopLimit 0;
AdvDefaultLifetime 1800;
AdvHomeAgentFlag off;
AdvDefaultPreference medium;
AdvLinkMTU 1492;
prefix 2003:42:e67f:d3ca::/64
{
AdvValidLifetime 14400;
AdvPreferredLifetime 1800;
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
}; # End of prefix definition
}; # End of interface definition
Run Code Online (Sandbox Code Playgroud)
从服务器主机,我可以成功地从 Internet ping6主机。现在,当我尝试通过请求路由器来强制RA 时,ppp0
我得到:
Soliciting ff02::2 (ff02::2) on ppp0...
Hop limit : undefined ( 0x00)
Stateful address conf. : No
Stateful other conf. : Yes
Router preference : medium
Router lifetime : 1800 (0x00000708) seconds
Reachable time : unspecified (0x00000000)
Retransmit time : unspecified (0x00000000)
MTU : 1492 bytes (valid)
Prefix : 2003:42:e67f:d3ca::/64
Valid time : 14400 (0x00003840) seconds
Pref. time : 1800 (0x00000708) seconds
Run Code Online (Sandbox Code Playgroud)
我期望的是,所有节点eth1
都配置了 SLAAC,但是当我尝试请求时,eth1
我得到:
Soliciting ff02::2 (ff02::2) on eth1...
Timed out.
Timed out.
Timed out.
No response.
Run Code Online (Sandbox Code Playgroud)
不知何故,从to (和任何其他设备)转发RA数据包似乎根本不起作用。为什么?据我所知,任何带有 DSL 调制解调器的路由器都必须以某种方式将RA从其内部调制解调器设备转发到连接的物理 LAN 端口,否则连接到那里的任何主机都不会获得 IPv6 地址,对吗?现在路由器和我的 debian box 之间的区别在哪里?如果您有任何提示,我将不胜感激。ppp0
eth1
不应转发路由器广告。因此,当您发现它们没有被转发时,至少该部分按预期工作。
您应该在您的路由器中运行您自己的路由器广告守护程序,以便它向 LAN 广告自己。
您的三个 LAN 应该有三个单独的 /64 前缀。因此,您需要从 ISP 获得路由 /62 或更短的路由。这没有问题,因为您的 ISP 应该为此目的给您一个较短的前缀(多短取决于您问谁,最初是 /48,但有些人只会分发 /56)。
如果 ppp 链接上有 DHCPv6 服务器可用,则您可以发送 DHCPv6 请求,要求将前缀委派给您。否则,您可能必须真正与人交谈。