tun2proxy -SOCKS5等代理转换为TUN口

本文最后更新于 2024年3月26日 下午

介绍

tun2proxy 是一个基于 smoltcp 在 Linux 上 通过HTTP 和 SOCKS 代理的创建隧道接口的项目,使用Rust 语言开发。

功能

  • HTTP 代理支持(无身份验证、基本身份验证和摘要身份验证)
  • SOCKS4 和 SOCKS5 支持(无身份验证、用户名/密码身份验证)
  • SOCKS4a和SOCKS5h支持(通过虚拟DNS功能)
  • 用于路由所有流量的自动化配置
  • IPv4 和 IPv6 支持
  • SOCKS5 UDP 支持
  • 本机支持通过 TCP 代理 DNS

项目地址:https://github.com/blechschmidt/tun2proxy

安装使用

手动编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
git clone https://github.com/blechschmidt/tun2proxy.git

# 克隆项目

cd tun2proxy

cargo build --release

# 编译 (需要提前安装cargo工具)

cd ./target/release

# 进入输出目录

下载二进制包

官方发布地址:https://github.com/blechschmidt/tun2proxy/releases

PS:选好对应CPU和系统

本站编译好的:https://songxwn.com/file/tun2proxy (Linux X86-64)

使用-手动配置路由和接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ip tuntap add name tun163 mode tun user $USER

# 提前创建好tun三层虚拟口

sudo ip link set tun163 up

# 配置状态为UP


./tun2proxy --tun tun163 --proxy "socks5://username:[email protected]:9527"

# 前台运行,将socks5 转换为三层接口。格式为proto://[username[:password]@]host:port

ip route add 128.0.0.0/1 dev tun163

# 手动配置路由指向,也可以配置策略路由等操作。


PS:IP命令配置的都是临时的,重启失效。

使用-自动化配置

1
2
3
4
5
./tun2proxy --setup auto --proxy "socks5://1.2.3.4:1080"


# 自动将所有流量路由到指定的代理。

命令说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Tunnel interface to proxy.

Usage: tun2proxy [OPTIONS] --proxy <URL>

Options:
-t, --tun <name> Name of the tun interface [default: tun0]
--tun-fd <fd> File descriptor of the tun interface
--tun-mtu <mtu> MTU of the tun interface (only with tunnel file descriptor) [default: 1500]
-p, --proxy <URL> Proxy URL in the form proto://[username[:password]@]host:port
-d, --dns <strategy> DNS handling strategy [default: virtual] [possible values: virtual, over-tcp, direct]
--dns-addr <IP> DNS resolver address [default: 8.8.8.8]
-6, --ipv6-enabled IPv6 enabled
-s, --setup <method> Routing and system setup [default: none] [possible values: none, auto]
-b, --bypass <IP|CIDR> IPs and CIDRs used in routing setup which should bypass the tunnel
-v, --verbosity <level> Verbosity level [default: info] [possible values: off, error, warn, info, debug, trace]
-h, --help Print help
-V, --version Print version

DNS解析

当 DNS 解析由机器上的服务或本地网络中的服务器执行时,DNS 解析将不会通过隧道接口执行,因为指向 localhost 或本地网络的路由比Tun 通道更细。 在这种情况下,建议更新文件以使用通过隧道接口路由的名称服务器地址。当虚拟 DNS 正常工作时,你会看到通过以下方式解析后的主机名连接日志信息,

Tun和Tap

Tun虚拟设备和物理网卡的区别是Tun虚拟设备是IP层设备,从/dev/net/tun字符设备上读取的是IP数据包,写入的也只能是IP数据包,因此不能进行二层操作,如发送ARP请求和以太网广播。与之相对的是,Tap虚拟设备是以太网设备,处理的是二层以太网数据帧,从/dev/net/tun字符设备上读取的是以太网数据帧,写入的也只能是以太网数据帧。从这点来看,Tap虚拟设备和真实的物理网卡的能力更接近。


tun2proxy -SOCKS5等代理转换为TUN口
https://songxwn.com/tun2proxy/
作者
Song
发布于
2024年1月5日
更新于
2024年3月26日
许可协议