You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将热点WiFi流量通过SSH SOCKS5隧道路由至指定端口?

解决方案:将热点WiFi流量路由至SSH SOCKS5隧道

我来帮你搞定这个问题!之前的方案没生效,大概率是踩了两个关键坑:SSH隧道绑定范围不对,或者没开启IP转发。下面一步步来解决:

1. 先修正SSH隧道的绑定范围

默认的ssh -D 8090只会绑定127.0.0.1,这意味着只有本机能访问这个SOCKS5端口,连接热点的手机根本碰不到它。你得修改隧道命令,让它绑定所有网卡(包括热点接口):

sshpass -p <pass> ssh -Nf -D 0.0.0.0:8090 user@domain.com

如果你的手机需要UDP流量(比如视频通话、DNS查询),可以加个参数开启UDP转发(部分SSH版本需要):

sshpass -p <pass> ssh -Nf -D 0.0.0.0:8090 -o "DynamicForwarding=yes" user@domain.com

先验证隧道正常:在本机执行curl -x socks5://0.0.0.0:8090 https://ifconfig.me,返回的应该是远程服务器的IP,而不是你本地局域网的IP。

2. 开启IP转发(必须步骤!)

Linux默认关闭IP转发,不开启的话,热点的流量根本没法通过本机转发出去:

  • 临时生效(重启后失效):
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  • 永久生效:
    编辑/etc/sysctl.conf,找到net.ipv4.ip_forward这一行,改成:
    net.ipv4.ip_forward=1
    
    然后执行sysctl -p让配置立刻生效。

3. 配置iptables规则

先确认你的热点子网:用ip addr查看热点接口(一般叫ap0wlan0:1)的IP,比如常见的是192.168.4.1/24,对应的子网就是192.168.4.0/24

3.1 转发TCP流量到8090端口

iptables -t nat -A PREROUTING -s 192.168.4.0/24 -p tcp --syn -j REDIRECT --to-ports 8090

3.2 (可选)转发UDP流量到8090端口

如果需要支持UDP流量,再加这条规则:

iptables -t nat -A PREROUTING -s 192.168.4.0/24 -p udp -j REDIRECT --to-ports 8090

3.3 允许转发链的流量

确保iptables不会拦截热点子网的转发流量:

iptables -A FORWARD -s 192.168.4.0/24 -j ACCEPT
iptables -A FORWARD -d 192.168.4.0/24 -j ACCEPT

4. 处理防火墙干扰(如果用了ufw/firewalld)

如果你开了系统防火墙,得给流量开绿灯:

  • ufw用户
    ufw allow in on <热点接口> to any port 8090
    ufw allow forward
    
  • firewalld用户
    firewall-cmd --add-masquerade --permanent
    firewall-cmd --add-port=8090/tcp --add-port=8090/udp --permanent
    firewall-cmd --reload
    

5. 测试验证

  1. 手机连接你的热点
  2. 访问https://ifconfig.me,看返回的IP是不是SSH远程服务器的IP
  3. 在本机执行tcpdump -i <热点接口> port 8090,能看到手机的流量被转发到8090端口就说明成功了

内容的提问来源于stack exchange,提问作者membersound

火山引擎 最新活动