如何在OSX上设置TUN接口的IP地址(没有目标地址)?

nfl*_*cco 8 ip macos networking ifconfig tun

如何在OSX上为TUN接口设置IP地址?我无法弄清楚如何在不指定目标IP的情况下为我的接口设置IP地址.我不想这样做 - 我想要或多或少地在以后的某个时间点建立到任意地址的隧道.先前的问题是无益的:

  1. 一个问题答案不明确,所以我尝试按照参考.
  2. 这个问题为tun设备指定了一个指向ip地址的点,因此它有一个目的地,这正是我不想要的.

osxtuntap的页面上,它说:

ifconfig tap0 10.1.2.3 up
Run Code Online (Sandbox Code Playgroud)

我不能在OSX 10.6上使用TUN接口:

$ sudo ifconfig tun0 10.1.2.3 up
ifconfig: ioctl (SIOCAIFADDR): Destination address required
Run Code Online (Sandbox Code Playgroud)

添加网络掩码没有帮助 - OSX似乎需要目标地址:

$ ifconfig tun0 10.0.0.1/24 netmask 255.255.255.0
ifconfig: ioctl (SIOCAIFADDR): Destination address required
Run Code Online (Sandbox Code Playgroud)

对于linux,我得到它的工作原理.根据这个页面,你打开()接口,并使用ip命令,并执行此操作,我之前做过这个,没有问题:

$ ip link set tun0 up
$ ip addr add 10.0.0.1/24 dev tun0
Run Code Online (Sandbox Code Playgroud)

我想做的就是我在linux中可以做的事情.


编辑:

我正在写一个小的UDP隧道应用程序.像这样:

tun1 - > udp app#1 - > udp tunnel - > udp app#2 - > tun2

如果udp应用程序位于不同的计算机上(假设是本地和远程),我想将他们各自的tun设备与ip地址关联起来,这样我就可以通过隧道将数据包从本地发送到远程数据包了.删除计算机上的tun设备的IP地址.

为了从linux教程中借鉴更多内容,作者在本地和远程设置了一个tun设备,关联ips,并运行一个简单的隧道应用程序,然后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
Run Code Online (Sandbox Code Playgroud)

dob*_*bbs 8

默认情况下,tun设备以第3层模式运行,即点对点.您要求第2层模式更接近通用以太网设备.Linux称这些tap设备.在OpenBSD中,您可以使用"ifconfig tun0 link0"将tun设备切换到第2层模式.Macintosh tuntaposx驱动程序模仿Linux的设备分裂; 改为打开水龙头设备.

您可能需要查看https://community.openvpn.net/openvpn/wiki/BridgingAndRouting以确定您是否真的需要点按设备.他们增加了一点开销.如果你只需要两个盒子来互相传递IP数据包而不需要桥接或广播到更大的子网,那么点对点就足够了.

例如,如果您有两台计算机,一台我们用LAN IP地址标记为"local",如192.168.0.12,另一台标记为"remote",其IP地址为192.168.1.14,则可以分配隧道IP地址:

ifconfig tun0 inet 10.0.0.1 10.0.0.2 up
Run Code Online (Sandbox Code Playgroud)

在本地系统上,并:

ifconfig tun0 inet 10.0.0.2 10.0.0.1 up
Run Code Online (Sandbox Code Playgroud)

在远程系统上.请注意远程机器上的反转透视图.不要将您的点设置为指向现有子网上任何内容的地址; 它不会正确路由.

我不能强调这一点:阅读并重新阅读手册页("man ifconfig"和"man tun",可能是其他人)直到它们有意义.我上面的ifconfig示例可能与您的操作系统略有不同.

另一方面,您可以查看GRE隧道,因为它们的功能反映了您为程序描述的内容.但是,GRE在当今以TCP为中心的网络中可能不可行,由于重大的安全问题,它也不是一个好主意.

如果您的目标是绕过霸道的防火墙,请注意许多此类防火墙会阻止UDP(尤其是GRE)数据包.在这种情况下,请尝试使用SSH接口隧道来设置tun/tap接口和转发数据包.您也可以获得加密和可选的压缩.:)

  • “默认情况下,tun 设备在第 3 层模式下运行,即点对点模式。” > 我不同意“第 3 层”意味着“点对点”。对我来说,“第 3 层”虚拟接口意味着该接口在 IP 级别运行(即它接收和接收带有 IP 标头的 IP 数据包,而不是以太网标头)。我不明白为什么处理 IP 数据包的虚拟接口必须是“点对点”的 - 事实上,这两个概念似乎几乎不相关。这似乎是 Mac OS 的限制(Linux 没有)。 (2认同)