如何在 OSX 上为 TUN 接口设置 IP 地址(没有目标地址)?
Posted
技术标签:
【中文标题】如何在 OSX 上为 TUN 接口设置 IP 地址(没有目标地址)?【英文标题】:How do I set an ip address for TUN interface on OSX (without destination address)? 【发布时间】:2013-07-04 19:25:23 【问题描述】:如何在 OSX 上为 TUN 接口设置 IP 地址?如果不指定目标 IP,我无法弄清楚如何为我的接口设置 IP 地址。我不想这样做——我想或多或少地在以后的某个时间点建立一条通往任意地址的隧道。之前没有帮助的问题:
-
a question 的答案不清楚,所以我尝试按照参考进行操作。
This question 为 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,我知道它是如何工作的。根据this page,您打开()界面,并使用 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
【问题讨论】:
没有人能弄清楚对方在做什么。同样,我也完全不知道你在做什么。你想做什么? 我已经用我所追求的具体用例和一个例子更新了我的答案 为什么看在上帝的份上这个问题而不是超级用户迁移到这里? 【参考方案1】:默认情况下,tun 设备以第 3 层模式运行,即点对点。您要求使用更类似于通用以太网设备的第 2 层模式。 Linux 将这些分接头称为设备。在 OpenBSD 中,您可以使用“ifconfig tun0 link0”将 tun 设备切换到第 2 层模式。 Macintosh tuntaposx 驱动程序模仿 Linux 的设备分裂;而是打开一个水龙头设备。
您可能需要查看https://community.open***.net/open***/wiki/BridgingAndRouting 以确定您是否真的需要 Tap 设备。他们增加了一点开销。如果您只需要两个盒子在彼此之间传递 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 接口并转发数据包。您还可以获得加密和可选的压缩。 :)
【讨论】:
啊,有道理。我没有意识到 tun 在 bsd 上内置了 tap (monkey.org/openbsd/archive/tech/0406/msg00111.html)。在 linux 上,我相信同样的事情也发生过。 查看 FreeBSD 9.1 和 NetBSD 6 的手册页,该补丁仅适用于 OpenBSD。 OpenBSD 是奇怪的,它不会将 /dev 中的 tap 与 tun 分开。 不回答原始问题:“这个问题为 tun 设备设置了一个点对点 IP 地址,因此它有一个目的地,这正是我不想要的。”然而,这正是这个答案的作用:为 tun 设备提供点对点 IP 地址,因此它有一个目的地。 答案在第一段:“改为打开水龙头设备。”其余答案是问题的背景细节。 "默认情况下,tun 设备在第 3 层模式下运行,也就是点对点。" > 我不同意“第 3 层”的意思是“点对点”。对我来说,“第 3 层”虚拟接口意味着该接口在 IP 级别运行(即,它接收和接收带有 IP 标头的 IP 数据包,而不是以太网标头)。我不明白为什么处理 IP 数据包的虚拟接口必须是“点对点”的——事实上,这两个概念似乎毫无关联。这似乎是 Mac OS(Linux 没有)的限制。以上是关于如何在 OSX 上为 TUN 接口设置 IP 地址(没有目标地址)?的主要内容,如果未能解决你的问题,请参考以下文章
Python - 通过特定的IP地址路由selenium浏览器