Mac 上如何实现在使用 utun 时再绑定网络出口?

2022-05-05 19:57:03 +08:00
 8520ccc

以 wireguard 假设现在使用 wireguard 绑定到 utun5

再设定路由 0.0.0.0/1 128.0.0.0/1 再将服务端的 IP 路由指向 en0 此时可以正常使用,全局 IP 都变成了服务器的 IP

我想在此时能够再指定网卡 en0 进行拨号

先测试了(指定出口 IP ) dial, err := net.DialTCP("tcp", local, remote)

失败,提示错误 no route to host

然后测试了 (指定出口网卡)

			dialer := &net.Dialer{
				Control: func(network, address string, conn syscall.RawConn) error {
					return conn.Control(func(fd uintptr) {
						switch network {
						case "tcp4", "udp4":
							unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_BOUND_IF, bindIface.Index)
						case "tcp6", "udp6":
							unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_BOUND_IF, bindIface.Index)
						}
					})
				},
			}

依旧无效 此时提示错误:dial tcp xxxx:xxx: connect: network is unreachable

是不是没办法实现了。。。。。。

PS:以上两种测试 在不开启 utun 时 测试 en0 是正常的 在开启 utun 时 测试 utun 也是正常的

也就是同时只有一个出口可以正常得到响应

1140 次点击
所在节点    Go 编程语言
2 条回复
bugfan
2022-05-05 22:21:24 +08:00
我感觉是路由的问题,你把 wireguard 的路由写成局域网,然后分别尝试局域网的地址和公网地址是否可以通过不同的网卡发出去。印象里,你在 wireguard 客户端里设置允许的 ip 段,写某一段和写 0.0.0.0/0➕某一段,会在影响虚拟网卡和物理网卡路由表顺序
8520ccc
2022-05-06 12:28:13 +08:00
@bugfan 现在的情况是只要添加了路由走 utun5 的 IP 段 就没办法再使用 en0 发出去了 取消了自然可以的!或者说没有添加的部分就可以

好像 mac 的路由这里不支持多出口

对单个 IP 只能走物理网卡或者是虚拟网卡(根据路由确定)

不支持自定义

物理网卡的情况下没测试,或许有可能支持吧(同时连接 wifi + 网线)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/851024

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX