校园服务器透明代理

前言
这件事情起因是在学校服务器上分配了 3 个操作系统,分别叫做 MinecraftServer,WebHost,GitServer,Debian 13 系统;其中 MinecraftServer 是负责社团 MC 服务器,由于常年需要开启,所以内网穿透优先选择了这个节点。
既然需要选择内网穿透,那就需要过学校网关,当时写了一个自动过网关的脚本,通过 cron 协议每天和我们一起上早八……
由于学校的网关认证貌似一个 ip 只能对一个账号,尝试过 git pull 同步 git 服务器,上次尝试上脚本结果发现把跳板机的挤掉了,然后抑郁症大发作。
第二天早八过后就尝试使用了 proxychains 在 WebHost 上面进行代理。这个文章留给后人,讲解如何使用 proxychains 通过已经接入网络的电脑代理上网。
提示
设 A,B 机器在同一局域网的网段下,B 机器已经接入 Internet。
设置 SSH 服务器
在 B 机器上安装 ssh-server,一般来说作为跳板机,都会安装 ssh 服务器。
# 在已认证电脑上执行:
# 安装OpenSSH服务器(如未安装)
sudo apt update
sudo apt install openssh-server
# 启动SSH服务
sudo systemctl start ssh
sudo systemctl enable ssh
# 检查SSH服务状态
sudo systemctl status ssh
# 查看SSH服务器监听的端口(默认22)
sudo ss -tlnp | grep ssh其次,配置防火墙允许SSH连接:
# 如果已认证电脑有防火墙,允许SSH端口
sudo ufw allow 22/tcp
# 或者临时禁用防火墙(仅测试用)
sudo ufw disable配置 SSH 免密登录
下面在 A 机器上生成密钥对,注释为 proxy-key,一路点击回车,不要输入任何东西。
ssh-keygen -t rsa -b 4096 -C "proxy-key"这样我们就在 ~/.ssh/id_rsa 生成了密钥对,然后复制公钥到已认证电脑。在校园内,Minecraft 服务器地址在 192.168.119.230,接下来输入 yes 加入信任主机。
ssh-copy-id user@B的IP建立 SSH 隧道
接下来 A 电脑是无法上网的,我们没有办法使用 apt 下载 proxychains,此时需要使用 ssh 隧道通过 socks5 代理本机,我选择了 1080 端口。
ssh -f -N -D 127.0.0.1:1080 user@B的IP
# -N: 不执行远程命令
# -D: 本地动态端口转发(SOCKS5代理)
# -f: 持续连接隧道
# 1080: 本地端口号接下来对 apt 包使用代理:
# 1. 创建apt代理配置文件
sudo tee /etc/apt/apt.conf.d/80proxy << 'EOF'
Acquire::http::Proxy "socks5h://127.0.0.1:1080";
Acquire::https::Proxy "socks5h://127.0.0.1:1080";
EOF
# 2. 设置环境变量(供其他命令使用)
export HTTP_PROXY="socks5h://127.0.0.1:1080"
export HTTPS_PROXY="socks5h://127.0.0.1:1080"
export ALL_PROXY="socks5h://127.0.0.1:1080"
# 3. 现在可以更新和安装软件了
sudo apt update
sudo apt install proxychains autossh安装完毕后,我们删除已经建立的 /etc/apt/apt.conf.d/80proxy 文件,即:
sudo rm /etc/apt/apt.conf.d/80proxy接下来复查 1080 端口,使用更稳定的 autossh 自动创建隧道:
lsof -i:1080如果有返回值,那就使用 kill 命令终止进程:
sudo lsof -ti:1080 | xargs -r sudo kill -9Autossh 自动隧道与 Proxychains 透明代理
ProxyChains 是 Linux 和其他Unix下的代理工具。它可以使任何程序通过代理上网,允许 TCP 和 DNS 通过代理隧道,支持 HTTP、SOCKS4 和 SOCKS5 类型的代理服务器,并且可配置多个代理。ProxyChains 通过一个用户定义的代理列表强制连接指定的应用程序,直接断开接收方和发送方的连接。
autossh -M 0 -f -N -D 127.0.0.1:1080 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -o "ExitOnForwardFailure=yes" user@B的ip >> /tmp/autossh.log 2>&1完成后,再对 proxychains 进行配置:
# 备份原始配置文件
sudo cp /etc/proxychains.conf /etc/proxychains.conf.bak
# 使用sed命令快速修改
sudo sed -i 's/^socks4\s.*/socks5 127.0.0.1 1080/' /etc/proxychains.conf最后复查并测试:
# 检查SSH隧道是否建立
ss -tlnp | grep 1080
# 应该看到类似:LISTEN 0 128 127.0.0.1:1080
# 测试SOCKS5代理功能
curl --socks5 127.0.0.1:1080 http://ifconfig.me
# 应该返回已认证电脑的公网IP操作方案
各种网络操作通过代理,只需要前面添加 proxychains 即可:
# 更新系统
sudo proxychains apt update && sudo proxychains apt upgrade
# 下载文件
proxychains wget https://example.com/file.zip
proxychains curl -O https://example.com/file.tar.gz
# 使用git
proxychains git clone https://github.com/user/repo.git
proxychains git pull
# 使用scp传输文件
proxychains scp file.txt user@remote:/path/
# 使用rsync
proxychains rsync -avz /local/path user@remote:/remote/path
# 使用ping(注意:ping不走SOCKS5,需要额外配置)
# 使用curl测试ping替代
proxychains curl --connect-timeout 5 http://example.comEOF...
