Hi,
My Ipv6 FreeBSD was used to operate successfully in the past. These days, after many binary upgrades my ipv6 default route is not installed any more and I have created a script as a workarround that I am displaying in the end of this post. I am using the same configuration into different ipv6 networks and different machines (all with the same setup), so I can assume that I am missing something.
On all my machines, I use the same firewall rules and the same settings. On my rc.conf I have:
I have disabled the firewall using a
ipfw add 1 allow all from any to any
My network card gets an IPv6 and can ping local ipv6 hosts.
But It does not get a default route, which I can verify if I view the
netstat -nr
(I see there only a default route for ipv4).
Using -dD flags on the rtsol or tcpdump -n -i em0 icmp6 I can verify that I receive router advertisement (tested on 4-5 freebsd machines (
12.2-RELEASE-p7 FreeBSD 12.2-RELEASE-p7 GENERIC amd64 ) but no default route is ever installed, and thus I cannot ping or traceroute.
Example:
The rtsol output that shows the RA received, but nothing is installed in the routing table.
Also note that I have tried either by net.inet6.ip6.accept_rtadv=1 or net.inet6.ip6.accept_rtadv=0
To solve this as a workarround I have created the script at the end of this message, that parses the rtsol RA and installs the default route if absent. It works, but I would like to know why the default route is not installed, and what else should I look to fix it without this workarround.
the script that I have created for workarround to install a default ipv6 route is:
Any insights on ipv6 default gateway? Thanks!
My Ipv6 FreeBSD was used to operate successfully in the past. These days, after many binary upgrades my ipv6 default route is not installed any more and I have created a script as a workarround that I am displaying in the end of this post. I am using the same configuration into different ipv6 networks and different machines (all with the same setup), so I can assume that I am missing something.
On all my machines, I use the same firewall rules and the same settings. On my rc.conf I have:
Code:
#enable ipv6
ipv6_network_interfaces="re0"
ifconfig_re0_ipv6="inet6 accept_rtadv"
ipv6_activate_all_interfaces="YES"
ip6addrctl_policy="ipv6_prefer"
rtsold_enable="YES"
rtsold_flags="-aF"
I have disabled the firewall using a
ipfw add 1 allow all from any to any
My network card gets an IPv6 and can ping local ipv6 hosts.
But It does not get a default route, which I can verify if I view the
netstat -nr
(I see there only a default route for ipv4).
Using -dD flags on the rtsol or tcpdump -n -i em0 icmp6 I can verify that I receive router advertisement (tested on 4-5 freebsd machines (
12.2-RELEASE-p7 FreeBSD 12.2-RELEASE-p7 GENERIC amd64 ) but no default route is ever installed, and thus I cannot ping or traceroute.
Example:
Code:
# traceroute6 google.com
connect: No route to host
The rtsol output that shows the RA received, but nothing is installed in the routing table.
Also note that I have tried either by net.inet6.ip6.accept_rtadv=1 or net.inet6.ip6.accept_rtadv=0
Code:
# rtsol -Dd em0
rtsol: checking if em0 is ready...
rtsol: em0 is ready
rtsol: set timer for em0 to 0s
rtsol: New timer is 0s
rtsol: timer expiration on em0, state = 1
rtsol: set timer for em0 to 4s
rtsol: New timer is 4s
rtsol: received RA from fe80::21e:13ff:fe40:8e7f on em0, state is 2
rtsol: Processing RA
rtsol: ndo = 0x7fffffffe220
rtsol: ndo->nd_opt_type = 1
rtsol: ndo->nd_opt_len = 1
rtsol: ndo = 0x7fffffffe228
rtsol: ndo->nd_opt_type = 5
rtsol: ndo->nd_opt_len = 1
rtsol: ndo = 0x7fffffffe230
rtsol: ndo->nd_opt_type = 3
rtsol: ndo->nd_opt_len = 4
rtsol: rsid = [em0:slaac]
rtsol: stop timer for em0
rtsol: there is no timer
To solve this as a workarround I have created the script at the end of this message, that parses the rtsol RA and installs the default route if absent. It works, but I would like to know why the default route is not installed, and what else should I look to fix it without this workarround.
the script that I have created for workarround to install a default ipv6 route is:
Code:
#!/bin/sh
# If not default gateway is present, do setup one
# 2021.08.14 First Version, Minas
tmpfile=/tmp/$$.rtsol.txt
#ipv6 routes carry a : (xx:xx:xx) , while ipv4 carry dots (x.x.x.x)
ipv6gw=`netstat -nr | grep default | awk '{print $2}' | grep ':'`
# If this is not empty, we have a default ipv6 route
if [ ! -z "$ipv6gw" ] ; then
exit
fi
# if we are here we have to setup a default ipv6
rtsol -Dda > $tmpfile 2>&1
ipv6gw=`cat $tmpfile | grep received | tr -d ',' | awk '{print $5"%"$7}'`
echo "$0 Adding GW [$ipv6gw]"
route add -6 default $ipv6gw
rm $tmpfile
Any insights on ipv6 default gateway? Thanks!