我可以用 Tun/Tap 接口 ping 吗

Can I ping with Tun/Tap interface

我正在学习使用 tuntap 接口进行路由...我已经创建了一个 tun0 接口并在不同的子网上使用 ifconfig 命令配置了 IP 地址,并使用 ip route 命令添加了网关,我还使用了伪装规则... 我怀疑我能否使用 tuntap 接口执行 ping 操作,或者它们仅用于路由流量或我对这些接口一无所知的东西,或者可能是配置错误..

可能这个问题听起来很新,但我是,但请给我正确的方向..

好的格哈德,

编辑: 我是这样创建 tun dev 的:

int tun_dev_alloc()
{
    struct ifreq ifr;
    int tun_dev_fd , ioctl_err;
    if((tun_dev_fd = open("/dev/net/tun",O_RDWR)) < 0)
    {
        perror("Can't open /dev/net/tun");
        return tun_dev_fd;
    }

    memset(&ifr,0,sizeof(ifr));

    ifr.ifr_flags = IFF_TUN | IFF_NO_PI;
    strncpy(ifr.ifr_name,TUN_DEV,IFNAMSIZ);
    
    if((ioctl_err = ioctl(tun_dev_fd, TUNSETIFF, (void*) &ifr)) < 0)
    {
        perror("ioctl[TUNSETIFF]");
        close(tun_dev_fd);
        return ioctl_err;
    }
    return tun_dev_fd;

}

此 tun0 设备的配置:

$sudo ifconfig tun0 10.0.3.4/24 mtu 1500 up
$sudo ip route add default gateway via 10.0.3.10 dev tun0
$sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

现在 ping 响应:

ping  8.8.8.8 -I tun0
ping: Warning: source address might be selected on device other than tun0.
PING 8.8.8.8 (8.8.8.8) from 10.0.2.15 tun0: 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
20 packets transmitted, 0 received, 100% packet loss, time 1028ms

如有任何帮助,我们将不胜感激...

标准网络接口背后有一个硬件(网卡)。

Tuntap 不要:

https://www.kernel.org/doc/Documentation/networking/tuntap.txt

tl;dr:发送到 tuntap 接口的数据包被移交给 user-space 程序进行处理。该程序以某种方式承担了网卡的角色(例如:openvpn)。除非有程序将数据包从设备中取出并对其进行有意义的处理,否则它们将消失在虚无中(就像网卡的电缆断开连接一样)。