如何在 OSX 上为 TUN 接口设置 IP 地址(无目标地址)?

问题描述 投票:0回答:2

如何在 OSX 上为 TUN 接口设置 IP 地址?我无法弄清楚如何在不指定目标 IP 的情况下为我的接口设置 IP 地址。我不想这样做——我想或多或少地在稍后的时间点建立一条通往任意地址的隧道。之前的问题没有帮助:

  1. 有一个问题的答案不明确,所以我尝试按照参考文献进行操作。
  2. 这个问题为tun设备设置了一个点对点的ip地址,因此它有一个目的地,这正是我不想要的。

osxtuntap 的页面上写着:

ifconfig tap0 10.1.2.3 up

我无法在 OSX 10.6 上的 TUN 接口上实现此功能:

$ 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设备,关联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
    
networking macos ip ifconfig tun
2个回答
13
投票
默认情况下,tun 设备在第 3 层模式下运行,即点对点模式。您要求的是第 2 层模式,它更类似于通用以太网设备。 Linux 称这些为 Tap 设备。在 OpenBSD 中,您可以使用“ifconfig tun0 link0”将 tun 设备切换到第 2 层模式。 Macintosh tuntaposx 驱动程序模仿 Linux 的设备分裂;改为打开点击设备。

您可能需要查看

https://community.openvpn.net/openvpn/wiki/BridgingAndRouting 以确定您是否确实需要分流设备。它们增加了一点开销。如果您只需要两个盒子在彼此之间传递 IP 数据包,并且不需要桥接或广播到更大的子网,点对点就足够了。

例如,如果您有两台机器,其中一台我们用 LAN IP 地址(如 192.168.0.12)标记为“本地”,另一台我们用 LAN IP 地址(如 192.168.1.14)标记“远程”,您可以这样分配隧道 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 为中心的网络中可能不可行,也不是一个好主意。

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


0
投票
Wireguard 为其创建的 utun 设备添加多个地址。如果您在“Interface”部分的“Address”键中创建一个包含多个逗号分隔地址的wireguard wg-quick conf 文件,它将打开一个具有多个地址的utun 接口。

然后,如果您使用该conf文件运行

wg-quick up

,它会帮助打印它运行的命令以实现该效果。

示例:

[Interface] PrivateKey=REDACTED Address=fdc3:cbe8:ded7:491e::/64,172.21.0.207/24,192.168.78.7/24
输出:

[#] ifconfig utun3 inet6 fdc3:cbe8:ded7:491e::/64 alias [#] ifconfig utun3 inet 172.21.0.207/24 172.21.0.207 alias [#] ifconfig utun3 inet 192.168.78.7/24 192.168.78.7 alias [#] ifconfig utun3 up
对于非wireguard utun 设备,这些 ifconfig 命令非常适合我。

© www.soinside.com 2019 - 2024. All rights reserved.