如何从 socks 代理创建虚拟接口?

如何从 socks 代理创建虚拟接口?

我想从本地主机上的 SOCKS 5 代理创建一个网络接口。最终,它将与我拥有的无线接口桥接,该接口将在 AdHoc 模式下运行。这将允许此接口上的所有客户端使用 socks 代理,即使它们不支持 SOCKS。当我外出时,这将支持我的 iDevices、PSP 等。它将在我的笔记本电脑上运行。有人可以提供一些有用的资源来帮助我在 Ubuntu 机器上设置 SOCKS 代理接口吗?提前谢谢!

答案1

您需要 tun2socks,它是 BadVPN 项目的一部分(https://github.com/ambrop72/badvpn)。这里已经有一个答案推荐tun2socks,但是缺少示例。

您可以从源代码构建 tun2socks,也可以安装预编译包。例如,在 Ubuntu 中:

sudo add-apt-repository ppa:hda-me/badvpn-tun2socks
sudo apt-get update
sudo apt-get install badvpn-tun2socks

ip tuntap add dev tun1 mode tun user nobody
ifconfig tun1 up 10.0.0.1/24

# --netif-ipaddr 10.0.0.2 is not a typo.
# It specifies the IP address of the virtual router inside the TUN device,
# and must be different than the IP of the TUN interface itself.
# This command assumes you have tor up and running on 127.0.0.1:9050.
# Of course, you can use any other SOCKS proxy instead.
badvpn-tun2socks --tundev tun1 --netif-ipaddr 10.0.0.2 --netif-netmask 255.255.255.0 --socks-server-addr 127.0.0.1:9050

接下来,您需要决定是否要通过代理路由所有流量,还是仅将流量路由到某些特定 IP 或主机。如果您有这样的列表(或可以花费合理的精力创建一个列表),这是最有效的解决方案。

# Here list of hosts or IPs to route through proxy is just an example.
# You need to specify your own list.
list_of_IPs_to_route_via_proxy="example.com 203.0.113.5"
for IP in $(echo $list_of_IPs_to_route_via_proxy); do
  route add $IP gw 10.0.0.2; done

如果您需要通过代理路由所有流量,则情况会稍微复杂一些。在这种情况下,我建议仔细阅读https://github.com/ambrop72/badvpn/wiki/Tun2socks。官方文档假设您想使用 localhost:1080 作为代理,并提供了如何使用 SSH 动态转发创建本地 SOCKS 服务器的说明。文档中最重要的部分:

连接到 SSH 服务器,将 -D localhost:1080 传递给 ssh 命令以启用动态转发。这将使 ssh 打开 badvpn-tun2socks 将使用的本地 SOCKS 服务器。如果您使用 Putty,请转到连接->SSH->隧道,在源端口中输入 1080,选择动态并单击添加。

剩下的就是通过 TUN 设备而不是现有的默认网关来路由连接。具体操作如下:

通过现有网关向 SSH 服务器添加路由,其度量值低于原始默认路由。如果您的 DNS 服务器位于 Internet(而不是本地网络),也请为其添加路由(如 SSH 服务器的路由)。这是必需的,因为 tun2socks 默认不转发 UDP(见下文)。通过 TUN 设备中的虚拟路由器添加默认路由,其度量值低于原始默认路由,但高于 SSH 和 DNS 路由。

这将使所有外部连接都通过 TUN 设备,SSH 连接除外(否则 SSH 将通过 TUN 设备,而 TUN 设备将通过... SSH)。

例如(假设没有现有的度量<=6的默认路由;否则删除它们或更改它们的度量),在Linux中:

route add <IP_of_SSH_server> gw <IP_of_original_gateway> metric 5 <same for DNS>
route add default gw 10.0.0.2 metric 6

文档还有使用 tun2socks 进行 UDP 转发的示例,如何通过 Tor 路由所有流量,如何获取 IPv6 支持。

答案2

当然有可能!请查看以下链接:

https://code.google.com/p/badvpn/wiki/tun2socks

答案3

您无法这样做,因为 SOCKS 无法在足够低的层上运行 - 它只能代理 TCP 连接,而不能代理原始 IP 数据包。无论有没有 NAT,这都是设置路由所必需的;但是桥接(如brctl)需要更多 – 发送原始以太网帧的能力。

您应该研究一下 VPN – OpenVPN 设置起来相当简单。

相关内容