Networking 如何在OSX上为TUN接口设置ip地址(没有目标地址)?

Networking 如何在OSX上为TUN接口设置ip地址(没有目标地址)?,networking,macos,ip,ifconfig,tun,Networking,Macos,Ip,Ifconfig,Tun,如何在OSX上设置TUN接口的IP地址?如果不指定目标ip,我无法确定如何为接口设置ip地址。我不想这样做——我想在以后的某个时间点或多或少地建立一个到任意地址的隧道。之前没有帮助的问题: 有一个不清楚的答案,所以我试着按照参考 为tun设备设置点对点ip地址,这样它就有了目的地,这正是我不想要的 它的页面上写着: 对于TUN接口,我无法在OSX 10.6上执行此操作: $ sudo ifconfig tun0 10.1.2.3 up ifconfig: ioctl (SIOCAIFADDR):

如何在OSX上设置TUN接口的IP地址?如果不指定目标ip,我无法确定如何为接口设置ip地址。我不想这样做——我想在以后的某个时间点或多或少地建立一个到任意地址的隧道。之前没有帮助的问题:

  • 有一个不清楚的答案,所以我试着按照参考
  • 为tun设备设置点对点ip地址,这样它就有了目的地,这正是我不想要的
  • 它的页面上写着:

    对于TUN接口,我无法在OSX 10.6上执行此操作:

    $ sudo ifconfig tun0 10.1.2.3 up
    ifconfig: ioctl (SIOCAIFADDR): Destination address required
    
    添加网络掩码没有帮助-OSX似乎需要一个目标地址:

    $ ifconfig tun0 10.0.0.1/24 netmask 255.255.255.0
    ifconfig: ioctl (SIOCAIFADDR): Destination address required
    
    对于linux,我了解它的工作原理。根据,您打开()接口,使用ip命令,然后执行此操作,我以前做过此操作,没有任何问题:

    $ ip link set tun0 up
    $ ip addr add 10.0.0.1/24 dev tun0
    
    我想做的就是在linux中可以做的事情


    编辑:

    我正在编写一个UDP隧道应用程序。像这样:

    tun1->udp应用程序1->udp隧道->udp应用程序2->tun2

    如果udp应用程序在不同的计算机上(比如本地和远程),我想将它们各自的tun设备与ip地址关联,这样我就可以通过隧道将数据包发送到机器上tun设备的ip地址,从本地发送到远程

    为了从linux教程中获得更多信息,作者在本地和远程设置了一个tun设备,关联IP,运行一个简单的隧道应用程序,然后ping隧道的另一端:

    [remote]# ip link set tun3 up
    [remote]# ip addr add 192.168.0.2/24 dev tun3
    [remote]$ ./simpletun -i tun3 -s
    # server blocks waiting for the client to connect
    [local]# ip link set tun11 up
    [local]# ip addr add 192.168.0.1/24 dev tun11
    [local]$ ./simpletun -i tun11 -c 10.2.3.4
    # nothing happens, but the peers are now connected
    [local]$ ping 192.168.0.2
    

    默认情况下,tun设备以第3层模式运行,即点对点模式。您要求的是第2层模式,它更类似于普通以太网设备。Linux称这些为tap设备。在OpenBSD中,您可以使用“ifconfig tun0 link0”将tun设备切换到第2层模式。Macintosh tuntaposx驱动程序模仿Linux的设备分裂;而是打开一个抽头装置

    您可能需要查看以确定是否确实需要tap设备。它们增加了一点开销。如果您只需要两个盒子在彼此之间传递IP数据包,而不需要桥接或广播到更大的子网,那么点对点就足够了

    例如,如果您有两台机器,一台我们用192.168.0.12这样的LAN IP地址标记为“本地”,另一台我们用192.168.1.14这样的LAN IP地址标记为“远程”,那么您可以分配隧道IP地址:

    ifconfig tun0 inet 10.0.0.1 10.0.0.2 up
    
    在本地系统上,以及:

    ifconfig tun0 inet 10.0.0.2 10.0.0.1 up
    
    在远程系统上。请注意远程机器上的反向透视图。不要将点对点地址设置为现有子网上的任何内容;它的路线不正确

    我再怎么强调也不为过:反复阅读手册页面(“man-ifconfig”和“man-tun”,可能还有其他页面),直到它们有意义为止。我上面的ifconfig示例可能与您的操作系统略有不同

    从另一个角度来看,您可能会研究GRE隧道,因为它们的功能反映了您为您的程序所描述的内容。然而,GRE在当今以TCP为中心的网络中可能不可行,而且由于存在重大安全问题,GRE也不是一个好主意


    如果您的目标是绕过咄咄逼人的防火墙,请注意,许多这样的防火墙会阻止UDP(尤其是GRE)数据包。在这种情况下,请尝试SSH接口隧道来设置tun/tap接口并转发数据包。您还可以进行加密和选择性压缩。:)

    没人知道另一个人在干什么。同样,我也完全不知道你在做什么。你想做什么?我已经用我要寻找的特定用例更新了我的答案,还有一个例子,为什么这个问题迁移到这里而不是超级用户?啊,这是有道理的。我不知道tun在bsd上内置了tap()。在linux上,我相信同样的事情也发生了。从FreeBSD9.1和NetBSD6的手册页来看,该补丁只适用于OpenBSD。OpenBSD是一个在/dev中没有将tap和tun分开的古怪问题。它没有回答最初的问题:“这个问题为tun设备设置了一个点对点ip地址,所以它有一个目的地,这正是我不想要的。”但这正是这个答案的作用:给出一个tun设备的点对点IP地址,这样它就有了目的地。答案在第一段:“打开一个tap设备。”剩下的答案是这个问题的背景细节。
    ifconfig tun0 inet 10.0.0.2 10.0.0.1 up