Skip to contentSkip to conversation

New: ipv6 forward cause strange route

Bugme-new Andrew Morton 3 participants 4 messages Nov 3, 2009 – Nov 4, 2009 1 message not in the archive

Subsystems (2)
lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]/

#1 lore raw

(switched to email. Please respond via emailed reply-to-all, not via the bugzilla web interface).

Quoted 69 lines · On Sat, 17 Oct 2009 10:42:01 GMT [email protected] wrote:

http://bugzilla.kernel.org/show_bug.cgi?id=14427

Summary: ipv6 forward cause strange route
Product: Networking
Version: 2.5
Platform: All
OS/Version: Linux
Tree: Mainline
Status: NEW
Severity: normal
Priority: P1
Component: IPV6
AssignedTo: [email protected]
ReportedBy: [email protected]
Regression: No

When enabling forwarding for IPv6 on interface, in the routing table local appears new route. It like route to local ip but with all host bits set to 0. Example:
--------------------------------------------------

  # cat /proc/sys/net/ipv6/conf/eth0/forwarding
  0
  # ip -6 addr add 2001:db8:1:1::5/64 dev eth0
  # ip -6 route show table local
  ...
  local 2001:db8:1:1::5 via :: dev lo  proto none  metric 0  mtu 16436 advmss
16376 hoplimit 4294967295
  ...
  # echo 1 > /proc/sys/net/ipv6/conf/eth0/forwarding 
  # ip -6 route show table local
  ...
  local 2001:db8:1:1:: via :: dev lo  proto none  metric 0  mtu 16436 advmss
16376 hoplimit 4294967295
  local 2001:db8:1:1::5 via :: dev lo  proto none  metric 0  mtu 16436 advmss
16376 hoplimit 4294967295
  ...
--------------------------------------------------
After enabling forwarding, route "2001:db8:1:1:: via :: dev lo" is added. No
matter, forwarding is enabled before or after adding of address, this route is
"on" with forwarding and "off" without it.
Such behavior causes problems with /127 network masks. For example:
--------------------------------------------------
  # echo 1 > /proc/sys/net/ipv6/conf/eth0/forwarding 
  # ip -6 addr add 2001:db8:1:1::5/127 dev eth0
  # ip -6 route add default via 2001:db8:1:1::4
  RTNETLINK answers: Invalid argument
--------------------------------------------------
But if we disable forwarding (and strange route) when adding needed route, we
will succeed.
--------------------------------------------------
  # echo 0 > /proc/sys/net/ipv6/conf/eth0/forwarding 
  # ip -6 route add default via 2001:db8:1:1::4
  # echo 1 > /proc/sys/net/ipv6/conf/eth0/forwarding 
--------------------------------------------------
Default route remains in the table after enabling forwarding and it is doing in
work. But in this case we still can not access 2001:db8:1:1::4, because it is
routed to loopback:
--------------------------------------------------
  # ping6 -c 1 2001:db8:1:1::4
  PING 2001:db8:1:1::4(2001:db8:1:1::4) 56 data bytes
  64 bytes from 2001:db8:1:1::5: icmp_seq=1 ttl=64 time=0.114 ms
--------------------------------------------------
We get reply from self interface.

This was tested on x86 and x86_64 with 2.6.30 kernel and some previous versions on ArchLinux (2.6.30 x86 and x86_64), Ubuntu (2.6.28-15-generic x86_64) and gentoo (2.6.30-gentoo-r5 x86_64).

#2 lore raw

Hello.

This is not a bug but a feature of IPv6 called "subnet anycast address." The address is automatically assigned on routers.

References:
RFC 2526: Reserved IPv6 Subnet Anycast Addresses
RFC 3627: Use of /127 Prefix Length Between Routers Considered Harmful

--yoshfuji

Quoted 79 lines · Andrew Morton

(switched to email. Please respond via emailed reply-to-all, not via the bugzilla web interface).

Quoted 65 lines · On Sat, 17 Oct 2009 10:42:01 GMT [email protected] wrote:

http://bugzilla.kernel.org/show_bug.cgi?id=14427

Summary: ipv6 forward cause strange route
Product: Networking
Version: 2.5
Platform: All
OS/Version: Linux
Tree: Mainline
Status: NEW
Severity: normal
Priority: P1
Component: IPV6
AssignedTo: [email protected]
ReportedBy: [email protected]
Regression: No

When enabling forwarding for IPv6 on interface, in the routing table local appears new route. It like route to local ip but with all host bits set to 0. Example:
--------------------------------------------------

  # cat /proc/sys/net/ipv6/conf/eth0/forwarding
  0
  # ip -6 addr add 2001:db8:1:1::5/64 dev eth0
  # ip -6 route show table local
  ...
  local 2001:db8:1:1::5 via :: dev lo  proto none  metric 0  mtu 16436 advmss
16376 hoplimit 4294967295
  ...
  # echo 1 > /proc/sys/net/ipv6/conf/eth0/forwarding 
  # ip -6 route show table local
  ...
  local 2001:db8:1:1:: via :: dev lo  proto none  metric 0  mtu 16436 advmss
16376 hoplimit 4294967295
  local 2001:db8:1:1::5 via :: dev lo  proto none  metric 0  mtu 16436 advmss
16376 hoplimit 4294967295
  ...
--------------------------------------------------
After enabling forwarding, route "2001:db8:1:1:: via :: dev lo" is added. No
matter, forwarding is enabled before or after adding of address, this route is
"on" with forwarding and "off" without it.
Such behavior causes problems with /127 network masks. For example:
--------------------------------------------------
  # echo 1 > /proc/sys/net/ipv6/conf/eth0/forwarding 
  # ip -6 addr add 2001:db8:1:1::5/127 dev eth0
  # ip -6 route add default via 2001:db8:1:1::4
  RTNETLINK answers: Invalid argument
--------------------------------------------------
But if we disable forwarding (and strange route) when adding needed route, we
will succeed.
--------------------------------------------------
  # echo 0 > /proc/sys/net/ipv6/conf/eth0/forwarding 
  # ip -6 route add default via 2001:db8:1:1::4
  # echo 1 > /proc/sys/net/ipv6/conf/eth0/forwarding 
--------------------------------------------------
Default route remains in the table after enabling forwarding and it is doing in
work. But in this case we still can not access 2001:db8:1:1::4, because it is
routed to loopback:
--------------------------------------------------
  # ping6 -c 1 2001:db8:1:1::4
  PING 2001:db8:1:1::4(2001:db8:1:1::4) 56 data bytes
  64 bytes from 2001:db8:1:1::5: icmp_seq=1 ttl=64 time=0.114 ms
--------------------------------------------------
We get reply from self interface.
Quoted 4 lines

This was tested on x86 and x86_64 with 2.6.30 kernel and some previous versions on ArchLinux (2.6.30 x86 and x86_64), Ubuntu (2.6.28-15-generic x86_64) and gentoo (2.6.30-gentoo-r5 x86_64).

--
To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#3 lore raw
Quoted 6 lines · I wrote:

This is not a bug but a feature of IPv6 called "subnet anycast address." The address is automatically assigned on routers.

References:
RFC 2526: Reserved IPv6 Subnet Anycast Addresses
RFC 3627: Use of /127 Prefix Length Between Routers Considered Harmful

I should say "Subnet-router anycast address" and
RFC3513: Internet Protocol Version 6 (IPv6) Addressing Architecture".

Sorry for confusion.

--yoshfuji

#4 lore raw
Quoted 6 lines · YOSHIFUJI Hideaki
Quoted 2 lines

RFC 2526: Reserved IPv6 Subnet Anycast Addresses
RFC 3627: Use of /127 Prefix Length Between Routers Considered Harmful

I should say "Subnet-router anycast address" and
RFC3513: Internet Protocol Version 6 (IPv6) Addressing Architecture".

FWIW, please note that commercial vendors haven't implemented this very extensively, and there's also some recent activity arguing this is not very useful:

http://tools.ietf.org/html/draft-kohno-ipv6-prefixlen-p2p-00

We'll likely get better idea how folks react to this during the next week's IETF.

Signature · 3 lines
Pekka Savola                 "You each name yourselves king, yet the
Netcore Oy                    kingdom bleeds."
Systems. Networks. Security. -- George R.R. Martin: A Clash of Kings