127.0.0.1:2000
cat /sys/class/net/ens9f1/carrier
1代表网线已连接,0代表网线未连接
nmcli device status
ip route
route -a
apt download redsocks
在B主机运行ssh -D 1080 user@A主机IP
,流量会通过 A 主机转发到公网 B
curl --socks5-hostname 127.0.0.1:2000 https://ifconfig.me
这条命令:
sudo iptables -t nat -A POSTROUTING -s B主机的内网IP/32 -o eth0 -j MASQUERADE
✅ 应当在 A 主机上执行。
项目 | 说明 |
---|---|
iptables -t nat -A POSTROUTING | 添加一条 NAT 表的 POSTROUTING 规则(用于源地址伪装) |
-s B主机的内网IP/32 | 指定从 B 主机发出的流量(内网 IP) |
-o eth0 | 指定出接口为 eth0 (A 主机通向公网的网卡) |
-j MASQUERADE | 使用地址伪装(SNAT)把源 IP 改为 A 主机公网 IP |
将 B 主机的流量伪装成 A 主机的流量从 A 主机上网(“共享上网”)。
sudo sysctl -w net.ipv4.ip_forward=1
开启 IP 转发,允许 A 主机转发来自 B 主机的网络包。
可加入 /etc/sysctl.conf
永久生效:
net.ipv4.ip_forward = 1
sudo ip route add default via A主机的内网IP
或者修改 /etc/netplan/*.yaml
或 /etc/network/interfaces
(视你的网络管理方式而定)。
如果你提供 B 主机的 IP 和 A 主机连接外网的网卡名称(如 eth0
/ens33
),我可以帮你写完整配置命令。
是的,可以把所有请求(主要是 TCP 流量)通过 iptables
全部转发到本地的 127.0.0.1:2000
端口,但这要依赖中间工具(如 redsocks
或 tun2socks
)来处理协议兼容性问题。
你问的是:
能否将系统发出的所有网络请求(例如浏览器、curl、apt 等)都自动转发到
127.0.0.1:2000
,让其代理出网?
✅ 答案是:可以!
但方式取决于你这个 2000
端口是什么类型的代理服务(HTTP/SOCKS5/TUN)。
类型 | 代理形式 | 是否支持 iptables 直接转发 | 是否需工具 | 推荐工具 |
---|---|---|---|---|
HTTP 代理(127.0.0.1:2000) | 普通 Web 代理 | ❌不支持直接转发 | ✅需要 | redsocks |
SOCKS5 代理 | 如 ssh -D、本地代理 | ❌不支持直接转发 | ✅需要 | redsocks , tun2socks |
透明代理 / VPN隧道 | 支持 TUN 接口 | ✅ | ❌无需中间服务 | iptables + TUN |
127.0.0.1:2000
你已经有一个在 127.0.0.1:2000
上监听的 HTTP 或 SOCKS5 代理程序(如:ssh -D 2000 ...
,或 privoxy
,或其他本地代理服务)
sudo apt update
sudo apt install redsocks -y
/etc/redsocks.conf
sudo nano /etc/redsocks.conf
示例:HTTP 代理
base {
log_info = on;
daemon = on;
redirector = iptables;
}
redsocks {
local_ip = 127.0.0.1;
local_port = 12345;
ip = 127.0.0.1;
port = 2000;
type = http-relay;
}
示例:SOCKS5 代理(如 ssh -D)
type = socks5;
sudo redsocks -c /etc/redsocks.conf
# 创建 chain
sudo iptables -t nat -N REDSOCKS
# 忽略本地/私有网段
for net in 0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 224.0.0.0/4 240.0.0.0/4; do
sudo iptables -t nat -A REDSOCKS -d $net -j RETURN
done
# 所有 TCP 流量转发到 redsocks
sudo iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
# 应用 chain 到所有出站请求
sudo iptables -t nat -A OUTPUT -p tcp -j REDSOCKS
sudo iptables -t nat -A PREROUTING -p tcp -j REDSOCKS
curl http://ipinfo.io
如果输出的是代理的公网 IP,说明成功。
# 查看OUTPUT 链中跳转的规则
sudo iptables -t nat -L OUTPUT -n -v
# 删除 OUTPUT 链中跳转到 REDSOCKS 的规则
sudo iptables -t nat -D OUTPUT -p tcp -j REDSOCKS 2>/dev/null
# 删除 PREROUTING 链中跳转到 REDSOCKS 的规则
sudo iptables -t nat -D PREROUTING -p tcp -j REDSOCKS 2>/dev/null
# 清空 REDSOCKS 链中所有规则
sudo iptables -t nat -F REDSOCKS 2>/dev/null
# 删除 REDSOCKS 链
sudo iptables -t nat -X REDSOCKS 2>/dev/null
sudo iptables -t nat -F
sudo iptables -t nat -X REDSOCKS
dnscrypt-proxy
、pdnsd
、或将 /etc/resolv.conf
指向外部curl
、apt
、浏览器等可以把所有请求都转发到 127.0.0.1:2000,只要你用
redsocks + iptables
配置正确。
你只需告诉我:
我可以为你生成完整配置并打包成 .sh
脚本运行。
类型 | 代理形式 | 是否支持 iptables 直接转发 | 是否需工具 | 推荐工具 |
---|---|---|---|---|
HTTP 代理(127.0.0.1:2000) | 普通 Web 代理 | ❌不支持直接转发 | ✅需要 | redsocks |
SOCKS5 代理 | 如 ssh -D、本地代理 | ❌不支持直接转发 | ✅需要 | redsocks , tun2socks |
透明代理 / VPN隧道 | 支持 TUN 接口 | ✅ | ❌无需中间服务 | iptables + TUN |