简介
最近在学习ipv6相关内容,在wsl上使用radvd来实现发送路由通告(RA报文)分配地址前缀跟dns服务器的功能。
radvd分配地址前缀
安装
sudo apt-get install radvd

编辑 /etc/radvd.conf 文件来定义路由器广告的参数

我使用的是我的tap0网卡,发送的路由前缀是2001:db8:1234:5678::/64
interface tap0 {
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
prefix 2001:db8:1234:5678::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
};

wsl打开ipv6转发功能(显得自己是个路由器?)
sudo sysctl -w net.ipv6.conf.all.forwarding=1

启动 radvd 服务
sudo systemctl start radvd
sudo systemctl enable radvd

运行radvd
sudo /etc/init.d/radvd start

在wsl这边可以用radvdump命令查看发送的路由通告消息的具体内容
sudo apt install radvdump
sudo radvdump
安装

运行


这时候可以看到qemu中的enp0s1网卡收到了此RA消息,并生成了此前缀的ipv6地址

如果想停止运行radvd,输入下列命令
sudo /etc/init.d/radvd stop

wsl这边的抓到的RA消息如下,这里就不多解释,等下篇文章再做解释,抓包文件已放此链接


radvd发送dns信息
编辑 /etc/radvd.conf 文件,增加红框所示的内容
RDNSS 是一种用于在 SLAAC 中提供域名解析服务的方式。它通过在 Router Advertisement 报文中包含 DNS 服务器地址,为主机提供域名解析服务,而不需要额外的 DHCPv6 服务器。在RFC6106中在5.1章节标题为Recursive DNS Server Option。

interface tap0 {
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
prefix 2001:db8:1234:5678::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
RDNSS fd00:2020:2019::100 fd00:2020:2019::200 {
AdvRDNSSLifetime 300;
};
};
运行

查看qemu这边的域名服务器,可以看到增加了信的ipv6域名服务器
cat /etc/resolv.conf

在wsl这边进行抓包,抓包文件已放此链接



radvd RA消息抑制
RA消息抑制其实就是radvd不再一直往链路上发送RA报文,只有收到RS报文才会回复RA报文,这样就不会浪费链路上的带宽。打开此功能只需要将配置文件中的AdvSendAdvert从on改为off即可



radvd前缀存活时间
按照参考链接,可以修改AdvValidLifetime跟AdvPreferredLifetime

源码
源码下载链接
https://radvd.litech.org/
RA报文发送的实现在send.c中的really_send函数


参考链接
FEATURED TAGS
Ubuntu
markdown
stm32
OSDK
飞控
串口
Jscope
C
C++
bin
J-Flash
字符串
指针数组
malloc
vscode
svg
png
github
python
CMake
CMakeLists
Linux
拷贝构造函数
GIF
录屏
docker
操作系统
make
Makefile
文件操作
DSP
CCS
SQL
MySQL
shell
bochs
计算机网络
win10
SMTP
Socket
iOS
uxplay
投屏
证书错误
apt
nodesource
ELF
Typora
图床
fossil
sql
git
SecureCRT
windows
cygwin
blog
alsa
alsa-utils
alsa-lib
音频
USB
链接文件
内存
mmap
tcpdump
交叉编译
网络
防火墙
crontab
bond
Linux性能
udev
linux
pcie
wsl2
MMIO
wsl
qemu
raspi4
gdb
ssh
tun
tap
ifconfig
打印
gmac
phy
vim
组播
rock3a
win11
usb
sd
ubuntu
iptables
netfilter
wifi
veth
ipv6
wireshark
radvd
dhcpv6
dhcpv4
网络命名空间
br虚拟网卡
NDP
emmc
存储
raspi4b
baremental
jtag
buildroot
rootfs
ext4
调试
uboot
dropbear
raspi
ebpf
uart
baremetal
kernel
bringup
libbpf
arm64
fit
gzip
压缩
initcall_debug
bootargs
I2C
代理
cmake
python3
zephyr
mcxa156
riscv
MCXA156
I3C
RPMB
tar
lzma
dns
picgo
gpt
otg
adb
fdtdump
gadget
fastboot
mdns
gcc
mailbox