# FreeBSD not honoring IPv6 ICMP unreachables?



## Terry_Kennedy (Dec 3, 2010)

I'm in the process of deploying IPv6. I have received an address allocation and have IPv6 working completely on my internal network. I have not yet set up external IPv6 connectivity. I am using a Cisco router as my external gateway (that probably doesn't matter).

Unfortunately, my isolated IPv6 island introduces serious lag when trying to connect to an outside host that offers both IPv4 and IPv6 connectivity, as FreeBSD tries the IPv6 address first and doesn't seem to react (at the application level - telnet / ftp / http) to the IPv6 unreachable ICMP messages generated by my Cisco gateway.

As an example (8-STABLE as of a few days ago):


```
(1:72) new-gate:/tmp# traceroute6 ftp.freebsd.org
traceroute6: Warning: ftp.freebsd.org has multiple addresses; using 2001:4f8:0:2::e
traceroute6 to ftp.freebsd.org (2001:4f8:0:2::e) from 2610:198:1:2::226, 64 hops max, 12 byte packets
 1  switch1  0.753 ms !N  0.706 ms !N  0.754 ms !N
```
So, the switch is sending ICMP unreachables and FreeBSD seems to recognize them. But:


```
(0:73) new-gate:/tmp# tcpdump -p -s 1500 ip6 and not host bedroom > foo &
[1] 23379
tcpdump: verbose output suppressed, use -v or -vv for full
 protocol decode
listening on bce0, link-type EN10MB (Ethernet), capture size 1500 bytes
(0:74) new-gate:/tmp# ftp ftp.freebsd.org
Trying 2001:6c8:2:600::132...
^C
(1:75) new-gate:/tmp# fg
tcpdump -p -s 1500 ip6 and not host bedroom > foo
^C148 packets captured
1010 packets received by filter
0 packets dropped by kernel
(0:76) new-gate:/tmp# cat foo
13:47:18.402824 IP6 new-gate.tmk.com.34496 > ftp.beastie.tdk.net.ftp: Flags [S], seq 896556175, win 65535, options [mss 8940,nop,wscale 
3,sackOK,TS val 348228776 ecr 0], length 0
13:47:18.405040 IP6 switch1.tmk.com > new-gate.tmk.com: ICMP6, destination unreachable, unreachable route ftp.beastie.tdk.net, length 88
```
I would have expected the destination unreachable to cause FTP to try the next address on its list right away, as it does in IPv4 mode.

Am I missing something here?


----------

