linux系统的内网服务器通过SOCKS5隧道访问互联网设置简介

来源:本站原创 点击数: 发布时间:2025年07月31日

开始之前

本文章内容设定俩个服务器均为linux操作系统,分别为A和B
A服务器是纯内网,设定内网IP为192.168.0.100
B服务器连接的内网,设定内网IP为192.168.0.180,同时这个服务器也连接的互联网。


① 在A服务器通过 SSH 建立 SOCKS5 隧道到B服务器

# 确保 sshpass 已安装,如果不安装这个也可以设置ssh的免密连接
sudo yum install sshpass  
# 先测试手动连接
ssh -f -N -D 1080 root@192.168.0.180   #开启socks5通道,端口设置的1080
export ALL_PROXY="socks5h://127.0.0.1:1080" #设置临时环境变量,也可以根据实际情况需要分别设置http与https代理

这会在 A 本地监听 127.0.0.1:1080,通过代理到B服务器已经可以访问互联网,则说明OK,可以继续下面的设置将隧道固定下来,重启服务器也不会失效。


② 在A服务器配置 systemd 自动建立 SOCKS5 隧道

创建服务文件 vi  /etc/systemd/system/ssh-socks5.service

# /etc/systemd/system/ssh-socks5.service
[Unit]
Description=SSH SOCKS5 Tunnel to B Server
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/bin/sshpass -p 'B服务器密码' ssh -N -D 1080 -o StrictHostKeyChecking=no root@192.168.0.180
Restart=always
RestartSec=5s
ExecStartPre=/bin/sleep 15
[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable ssh-socks5
sudo systemctl start ssh-socks5

确认运行中:

systemctl status ssh-socks5

③ 在A服务器设置环境变量让所有流量走 SOCKS5

编辑 ~/.bashrc/etc/profile.d/proxy.sh 添加:

export ALL_PROXY="socks5h://127.0.0.1:1080"
export http_proxy="socks5h://127.0.0.1:1080"
export https_proxy="socks5h://127.0.0.1:1080"

生效配置:

source ~/.bashrc

④ 在A服务器测试是否生效

curl http://ifconfig.me

返回 B 服务器的公网 IP 即成功。

结论

[A 服务器] --(SSH Socks5)--> [B 服务器] --Internet
A服务器的curl/git/pip等访问通过Socks5隧道127.0.0.1:1080 -> 实际上是转发到B服务器再访问的互联网