Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Oct 2019 16:57:15 +0200
From:      Marco van Tol <marco@tols.org>
To:        freebsd-ipfw@freebsd.org
Cc:        Marco van Tol <marco@tols.org>
Subject:   nat64lsn first hop in traceroute has a source ip of the final host
Message-ID:  <898BCDF8-EA5C-49C1-B159-7FCEEBD47B4F@tols.org>

next in thread | raw e-mail | index | archive | help
Hi there,

I setup a NAT64 gateway on a FreeBSD 11.3-RELEASE-p3 host using the =
following config:

-----
#!/bin/sh

fwcmd=3D"/sbin/ipfw"
nat64_v4=3D"193.0.31.240/28"
nat64_pfx_v6=3D"64:ff9b::/96"
icmp6ns=3D135
icmp6na=3D136

kldstat -q -m ipfw_nat64 || kldload ipfw_nat64
${fwcmd} -f flush
${fwcmd} nat64lsn NAT64 create prefix4 $nat64_v4
${fwcmd} add allow icmp6 from any to any icmp6types $icmp6ns,$icmp6na
${fwcmd} add nat64lsn NAT64 ip from any to $nat64_pfx_v6 in
${fwcmd} add nat64lsn NAT64 ip from any to $nat64_v4 in
${fwcmd} add allow ip from any to any
-----

This all works great in that the guests have no IPv4 any more, and in =
their point of view the entire world has migrated to IPv6-only.

There is only one quirck, and that is that the first hop in a traceroute =
towards a synthesized address reports as being sent from the =
destination, like this:
-----
[me@mylaptop ~]traceroute6 -w1 -n 64:ff9b::8.8.8.8
traceroute6 to 64:ff9b::8.8.8.8 (64:ff9b::808:808) from =
2001:67c:64:49:a421:5045:508d:495a, 64 hops max, 12 byte packets
 1  64:ff9b::808:808  1.732 ms  2.166 ms  2.198 ms
 2  64:ff9b::c100:605  2.131 ms  2.308 ms  3.216 ms
 3  64:ff9b::50f9:d0f7  3.115 ms  4.114 ms  3.657 ms
 4  64:ff9b::6caa:f1c1  3.892 ms
    64:ff9b::6caa:f1a1  4.034 ms  5.465 ms
 5  64:ff9b::6caa:ec87  5.895 ms
    64:ff9b::480e:eef5  4.412 ms
    64:ff9b::d8ef:310d  4.358 ms
 6  64:ff9b::808:808  4.418 ms  3.498 ms  3.247 ms
-----
As you can see the first hop already claims to be from 64:ff9b::808:808 =
(or 64:ff9b::8.8.8.8).

When I do a traceroute6 to a normal destination, the first hop reports =
correctly, like this:
-----
[me@mylaptop ~]traceroute6 -w1 -n dns.google
traceroute6 to dns.google (2001:4860:4860::8844) from =
2001:67c:64:49:a421:5045:508d:495a, 64 hops max, 12 byte packets
 1  2001:67c:64:49::1:2  2.627 ms  2.053 ms  2.576 ms
 2  2001:67c:2e8:26::5  1.905 ms  3.936 ms  3.472 ms
 3  2001:7f8:1::a501:5169:1  5.384 ms  8.982 ms  3.920 ms
 4  2001:4860:0:f8b::1  11.778 ms
    2001:4860:0:f8c::1  3.224 ms  5.524 ms
 5  2001:4860:0:1::1485  4.232 ms
    2001:4860:0:1::1c7d  21.334 ms  4.589 ms
 6  2001:4860:4860::8844  2.762 ms  2.173 ms  3.222 ms
-----

This does not break traceroute6, but it does break things like mtr.

Is there a way to change this behaviour so that traceroutes to =
synthesized addresses also report to be coming from the router IP on the =
first hop?

Thank you very much in advance!

--=20
Marco van Tol=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?898BCDF8-EA5C-49C1-B159-7FCEEBD47B4F>