IPv6 Tools
by Craig Miller
IP
ip is the successor to the venerable ifonfig. And with good reason, as ip can tell you much more about your configuration. It is installed by default on most distros, and usually lives at /sbin/ip.
link status
ip can display the status of the link (Layer 2 in the OSI model), as well as allow configuration of a VLAN based interface. To display the the link status use:
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 10:9a:dd:54:f6:34 brd ff:ff:ff:ff:ff:ff
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT qlen 1000
link/ether 10:9a:dd:ae:81:77 brd ff:ff:ff:ff:ff:ff
As you can see, it reports that status of link (is that cable plugged in?), and the MAC (Media Access Control, aka Ethernet) address.
ip addresses
ip can also show IPv4 and IPv6 addressing (using -4 and -6 respectively).
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 10:9a:dd:54:f6:34 brd ff:ff:ff:ff:ff:ff
inet 10.1.1.15/24 brd 10.1.1.255 scope global eth0
inet6 2607:c000:815f:5600:e4a1:4d5f:961a:4973/64 scope global temporary dynamic
valid_lft 6951sec preferred_lft 1551sec
inet6 2001:470:1d:489:fd2f:ea14:d171:c541/64 scope global temporary dynamic
valid_lft 6951sec preferred_lft 1551sec
inet6 2607:c000:815f:5600:fd2f:ea14:d171:c541/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2001:470:1d:489:487d:35e:3834:c9a/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2607:c000:815f:5600:487d:35e:3834:c9a/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2001:470:1d:489:a0f0:7c93:4135:b344/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2607:c000:815f:5600:a0f0:7c93:4135:b344/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2607:c000:815f:5600:129a:ddff:fe54:f634/64 scope global dynamic
valid_lft 6951sec preferred_lft 1551sec
inet6 2001:470:1d:489:4d85:44b3:3b87:1513/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2001:470:1d:489:5cd0:431a:b989:4517/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2001:470:1d:489:a121:bf93:87b8:c125/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2001:470:1d:489:c8c8:e6c4:ed49:e502/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2001:470:1d:489:129a:ddff:fe54:f634/64 scope global dynamic
valid_lft 6951sec preferred_lft 1551sec
inet6 fe80::129a:ddff:fe54:b634/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT qlen 1000
link/ether 10:9a:dd:ae:81:77 brd ff:ff:ff:ff:ff:ff
inet6 fe80::129a:ddff:feae:8177/64 scope link
valid_lft forever preferred_lft forever
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 10:9a:dd:54:f6:34 brd ff:ff:ff:ff:ff:ff
inet 10.1.1.15/24 brd 10.1.1.255 scope global eth0
inet6 2607:c000:815f:5600:e4a1:4d5f:961a:4973/64 scope global temporary dynamic
valid_lft 6951sec preferred_lft 1551sec
inet6 2001:470:1d:489:fd2f:ea14:d171:c541/64 scope global temporary dynamic
valid_lft 6951sec preferred_lft 1551sec
inet6 2607:c000:815f:5600:fd2f:ea14:d171:c541/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2001:470:1d:489:487d:35e:3834:c9a/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2607:c000:815f:5600:487d:35e:3834:c9a/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2001:470:1d:489:a0f0:7c93:4135:b344/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2607:c000:815f:5600:a0f0:7c93:4135:b344/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2607:c000:815f:5600:129a:ddff:fe54:f634/64 scope global dynamic
valid_lft 6951sec preferred_lft 1551sec
inet6 2001:470:1d:489:4d85:44b3:3b87:1513/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2001:470:1d:489:5cd0:431a:b989:4517/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2001:470:1d:489:a121:bf93:87b8:c125/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2001:470:1d:489:c8c8:e6c4:ed49:e502/64 scope global temporary deprecated dynamic
valid_lft 6951sec preferred_lft 0sec
inet6 2001:470:1d:489:129a:ddff:fe54:f634/64 scope global dynamic
valid_lft 6951sec preferred_lft 1551sec
inet6 fe80::129a:ddff:fe54:b634/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT qlen 1000
link/ether 10:9a:dd:ae:81:77 brd ff:ff:ff:ff:ff:ff
inet6 fe80::129a:ddff:feae:8177/64 scope link
valid_lft forever preferred_lft forever
But wait, there's more!
routing
ip can also display IPv4 and IPv6 routing. Remember that IPv6 is a different network protocol (Layer 3), and packets can flow differently than their IPv4 counter parts. No surprises looking at the IPv4 routes:
$ ip -4 route
default via 10.1.1.1 dev eth0 metric 100
10.1.1.0/24 dev eth0 proto kernel scope link src 10.1.1.15
The IPv6 route table displays the default route with a link-local next hop
$ ip -6 route
2001:470:1d:489::/64 dev eth0 proto kernel metric 256 expires 6865sec mtu 1280
2607:c000:815f:5600::/64 dev eth0 proto kernel metric 256 expires 6865sec
fe80::/64 dev eth0 proto kernel metric 256 mtu 1280
fe80::/64 dev eth1 proto kernel metric 256
default via fe80::224:a5ff:fee1:7ca dev eth0 proto kernel metric 1024 expires 1464sec mtu 1280 hoplimit 64
rdisc6
While ip will tell you the configuration of the host, rdisc6 will tell you the configuration of your router, or at least what it is sending out as Router Advertisements (RAs). RAs send out prefixes, and controls whether clients will start DHCPv6 clients (RFC 3315), with the A, M, and O flags. rdisc6 will make a router solicitation (RS), and print out the RA in response.
$ rdisc6 eth0
Soliciting ff02::2 (ff02::2) on eth0...
Hop limit : 64 ( 0x40)
Stateful address conf. : No
Stateful other conf. : Yes
Router preference : medium
Router lifetime : 1800 (0x00000708) seconds
Reachable time : unspecified (0x00000000)
Retransmit time : unspecified (0x00000000)
Source link-layer address: 00:24:A5:E1:07:CA
MTU : 1280 bytes (valid)
Prefix : 2607:c000:815f:5600::/64
Valid time : 7200 (0x00001c20) seconds
Pref. time : 1800 (0x00000708) seconds
Prefix : 2001:470:1d:489::/64
Valid time : 7200 (0x00001c20) seconds
Pref. time : 1800 (0x00000708) seconds
Route : 2607:c000:815f:5600::/56
Route preference : medium
Route lifetime : 7200 (0x00001c20) seconds
Recursive DNS server : 2607:c000:815f:5600::1
DNS server lifetime : 1800 (0x00000708) seconds
from fe80::224:a5ff:fee1:7ca
Soliciting ff02::2 (ff02::2) on eth0...
Hop limit : 64 ( 0x40)
Stateful address conf. : No
Stateful other conf. : Yes
Router preference : medium
Router lifetime : 1800 (0x00000708) seconds
Reachable time : unspecified (0x00000000)
Retransmit time : unspecified (0x00000000)
Source link-layer address: 00:24:A5:E1:07:CA
MTU : 1280 bytes (valid)
Prefix : 2607:c000:815f:5600::/64
Valid time : 7200 (0x00001c20) seconds
Pref. time : 1800 (0x00000708) seconds
Prefix : 2001:470:1d:489::/64
Valid time : 7200 (0x00001c20) seconds
Pref. time : 1800 (0x00000708) seconds
Route : 2607:c000:815f:5600::/56
Route preference : medium
Route lifetime : 7200 (0x00001c20) seconds
Recursive DNS server : 2607:c000:815f:5600::1
DNS server lifetime : 1800 (0x00000708) seconds
from fe80::224:a5ff:fee1:7ca
The Stateful address is the M flag, and Stateful other config, is the O flag. You can also see that two prefixes are being advertised into this network (the prefix advertised by my ISP is dynamic, where as my Hurricane Electric tunnel prefix is static).
There is a companion utility ndisc6 which will generate neighbour solicitations (NS). I don't use it much, but in order to install rdisc6, you will most often install the ndisc6 package.
v6disc
In addition to the tools above, I have written an IPv6 automatic discovery tool which you can find on github. v6disc.sh will detect which interfaces are up, and query all IPv6 nodes. if you have been wondering when nmap my scan your IPv6 networks, wait no longer. v6disc also has a Dual Stack option which will correlate IPv6 and IPv4 addresses, making your transition to IPv6 easier.
$ ./v6disc.sh -D -- Searching for interface(s) Found interface(s): eth0 -- INT:eth0 prefixs: 2607:c000:815f:5600 2001:470:1d:489 -- Detecting hosts on eth0 link fe80::129a:ddff:fe54:b634 10.1.1.15 fe80::203:93ff:fe67:4362 10.1.1.18 fe80::211:24ff:fece:f1a 10.1.1.12 fe80::211:24ff:fee1:dbc8 10.1.1.14 fe80::224:a5ff:fef1:7ca 10.1.1.1 fe80::225:31ff:fe02:aecb 10.1.1.9 fe80::226:bbff:fe1e:7e15 10.1.1.23 fe80::256:b3ff:fe04:cbe5 10.1.1.122 fe80::280:77ff:feeb:1dde 10.1.1.13 fe80::a00:27ff:fe21:e445 10.1.1.123 -- Discovered hosts 2607:c000:815f:5600:129a:ddff:fe54:b634 10.1.1.15 2607:c000:815f:5600:203:93ff:fe67:4362 10.1.1.18 2607:c000:815f:5600:211:24ff:fece:f1a 10.1.1.12 2607:c000:815f:5600:211:24ff:fee1:dbc8 10.1.1.14 2607:c000:815f:5600::1 10.1.1.1 2607:c000:815f:5600:225:31ff:fe02:aecb 10.1.1.9 2607:c000:815f:5600:226:bbff:fe1e:7e15 10.1.1.23 2607:c000:815f:5600:256:b3ff:fe04:cbe5 10.1.1.122 2607:c000:815f:5600:280:77ff:feeb:1dde 10.1.1.13 2607:c000:815f:5600:a00:27ff:fe21:e445 10.1.1.123 2001:470:1d:489:129a:ddff:fe54:b634 10.1.1.15 2001:470:1d:489:203:93ff:fe67:4362 10.1.1.18 2001:470:1d:489:211:24ff:fece:f1a 10.1.1.12 2001:470:1d:489:211:24ff:fee1:dbc8 10.1.1.14 2001:470:1d:489::1 10.1.1.1 2001:470:1d:489:225:31ff:fe02:aecb 10.1.1.9 2001:470:1d:489:226:bbff:fe1e:7e15 10.1.1.23 2001:470:1d:489:256:b3ff:fe04:cbe5 10.1.1.122 2001:470:1d:489:280:77ff:feeb:1dde 10.1.1.13 2001:470:1d:489:a00:27ff:fe21:e445 10.1.1.123 -- Pau
There's even a quiet mode which just returns the discovered hosts addresses without all the chatter (good for scripting). v6disc is open source (GPL) and can be found on github at https://github.com/cvmiller/v6disc
Other Tools
Of course there are the network x-ray tools, tcpdump and wireshark.But are too big to properly cover in this post, so I'll cover in another post.Happy Network
The keys to troubleshooting are know where you are at (ip addr), know where you are going (ip route), and what is out there (rdisc6 & v6disc). With these powerful, yet easy to use tools, your IPv6 network will be humming along in no time.
* Tools image from Creative Commons
No comments:
Post a Comment