以 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 也是正常的
也就是同时只有一个出口可以正常得到响应
1
bugfan 2022-05-05 22:21:24 +08:00 via iPhone
我感觉是路由的问题,你把 wireguard 的路由写成局域网,然后分别尝试局域网的地址和公网地址是否可以通过不同的网卡发出去。印象里,你在 wireguard 客户端里设置允许的 ip 段,写某一段和写 0.0.0.0/0➕某一段,会在影响虚拟网卡和物理网卡路由表顺序
|