nsproxy 使用教程
1、项目介绍
nsproxy
是一个 Linux 专用的命令行工具,旨在使应用程序强制使用指定的 SOCKS5 或 HTTP 代理。它的功能类似于 tsocks
、proxychains-ng
和 graftcp
,但采用了完全不同的机制。nsproxy
通过创建一个 TUN 设备并在新的网络命名空间中启动应用程序,然后将 TUN 设备连接到用户模式的 TCP/IP 堆栈,并将连接重定向到命名空间外的代理服务器。由于利用了命名空间机制,nsproxy
不需要任何特权,并且不会影响其他进程。
主要特性
- 支持 SOCKS5 和 HTTP 代理协议
- 支持 TCP 和 UDP 协议
- 内置 DNS 重定向
- 适用于静态链接的应用程序
- 无需特权
2、项目快速启动
安装
首先,克隆 nsproxy
项目到本地:
git clone https://github.com/nlzy/nsproxy.git
cd nsproxy
编译
使用 CMake 进行编译:
mkdir build
cd build
cmake ..
make
使用
编译完成后,你可以使用 nsproxy
来代理应用程序。以下是一些示例:
使用 SOCKS5 代理
nsproxy dig example.com A
使用 HTTP 代理
nsproxy -H curl example.com
常用选项
-H
: 使用 HTTP 代理(默认使用 SOCKS5)-s <server>
: 代理服务器地址(默认值为127.0.0.1
)-p <port>
: 代理服务器端口(默认值为1080
用于 SOCKS5,8080
用于 HTTP)-d <dns>
: DNS 重定向选项-v
: 详细模式-q
: 静默模式
3、应用案例和最佳实践
案例1:在静态链接的应用程序中使用代理
某些应用程序是静态链接的,无法通过传统的 LD_PRELOAD
方法进行代理。nsproxy
可以完美解决这个问题,因为它不需要修改应用程序的运行环境。
nsproxy -s 192.168.1.100 -p 1080 my_static_app
案例2:在容器中使用代理
在容器化环境中,nsproxy
可以用于确保容器内的所有网络流量都通过指定的代理服务器。
docker run --network=none --privileged=true -v /path/to/nsproxy:/nsproxy my_container nsproxy -H curl example.com
最佳实践
- 避免在特权模式下使用:
nsproxy
设计为无需特权,因此在非特权模式下使用可以提高安全性。 - 配置 DNS 重定向:使用
-d
选项配置 DNS 重定向,以确保所有 DNS 请求也通过代理服务器。
4、典型生态项目
slirp4netns
slirp4netns
是一个用于无特权网络命名空间的用户模式网络工具。它与 nsproxy
类似,但更专注于网络命名空间的管理。
proxychains-ng
proxychains-ng
是一个用于强制应用程序使用代理的工具,类似于 nsproxy
。它通过 LD_PRELOAD
机制实现,适用于大多数应用程序,但不适用于静态链接的应用程序。
graftcp
graftcp
是另一个用于强制应用程序使用代理的工具,类似于 nsproxy
。它通过修改 libc
的 connect
函数实现,适用于大多数应用程序。
通过结合这些工具,你可以在不同的场景下实现更灵活的网络代理配置。