TAP/TUN 设备的“目标地址”的用途是什么?
Pytun可让您轻松设置 tap/tun 设备的参数:
tun = TapTunDevice(name='mytun')
tun.addr = '10.66.66.1'
tun.dstaddr = '10.66.66.2'
tun.netmask = '255.255.255.0'
tun.up()
这样做将导致设备配置如下:
$ ifconfig mytun
mytun: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.66.66.1 netmask 255.255.255.0 destination 10.66.66.2
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我知道系统现在有一个 IP 为 10.66.66.1 的虚拟接口。并且推测在这种情况下,TUN 设备将“连接”到 IP 地址为 10.66.66.2 的(例如 VPN 网关)设备。
但是具体的目的是什么,让内核知道这是一个“点对点”接口,以及目标的 IP 地址吗?它是否会以某种方式影响路由,而仅配置路由表无法实现?
设置dstaddr
属性会产生一个SIOCSIFDSTADDR
ioctl。
netdevice(7)
手册页简单地说:
SIOCGIFDSTADDR, SIOCSIFDSTADDR Get or set the destination address of a point-to-point device using ifr_dstaddr. For compatibility, only AF_INET addresses are accepted or returned. Setting the destination address is a privileged operation.