【问题标题】:TUN interface created from C not showing up in ifconfig output从 C 创建的 TUN 接口未显示在 ifconfig 输出中
【发布时间】:2022-01-05 19:46:01
【问题描述】:

我编写了以下函数,应该在 Linux 上创建一个名为“my_tun”的 TUN 接口:

int tun_open()
{
  int fd;
  if ((fd = open("/dev/net/tun", O_RDWR)) == -1) {
    return -1;
  }

  struct ifreq ifr;
  strncpy(ifr.ifr_name, "my_tun", IFNAMSIZ);
  ifr.ifr_flags = IFF_TUN | IFF_NO_PI;

  if (ioctl(fd, TUNSETIFF, &ifr) == -1) {
    return -1;
  }

  return fd;
}

我正在通过在以--cap-add NET_ADMIN 开头的 Ubuntu docker 容器中运行它来测试它。在这个 docker 容器中,我首先执行:

mkdir /dev/net
mknod /dev/net/tun c 10 200

然后运行我的函数。后者没有失败,之后ifconfig 没有显示 TUN 接口,只有以太网和环回接口。我做错了什么?

【问题讨论】:

    标签: c linux networking tun


    【解决方案1】:

    我建议您查看ifconfig 工具的源代码。它应该包含创建tun 设备的正确代码。作为参考。

    最有可能的是,最新版本的“UNIX 网络编程”(Stevens 等人)应该也有关于如何创建 tun 设备的描述。

    【讨论】:

      【解决方案2】:

      尝试“ip link”,您可能会看到上面提供的代码没有返回 -1。此外,您的界面是非持久的,因此当您尝试 ifconfig 或 IP 链接时,您需要保持程序运行。 尝试在“return fd”之前添加一个 sleep 以争取时间,看看是否有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-25
        • 1970-01-01
        • 2020-01-28
        • 2011-02-09
        • 1970-01-01
        • 2011-09-29
        • 2011-01-12
        相关资源
        最近更新 更多