VPS 手动搭建 Socks5 协议(Dante)—— 完整技术教程

在很多运维、开发和安全测试场景中,需要一个可控、支持用户名认证、日志审计的 S5。Dante 是成熟稳定的 Socks 实现,适合用于企业或个人的长期部署。本文不使用一键脚本,每一步都手工完成并解释原因,便于读者学会底层原理并能扩展。
文章面向技术读者,带原理解释、操作步骤、配置说明、常见问题与进阶方案。🔧🧠
本文防失联,移步知乎:
VPS 手动搭建 Socks5 协议(Dante)—— 完整技术教程 - W不懂安全的文章 - 知乎
https://zhuanlan.zhihu.com/p/1963650776472744216适用场景举例:
-
多用户dài lǐ服务(分配账号)
-
测试网络连通性与透传(TCP/UDP)
-
作为链路中的一段dài lǐ,结合其他dài lǐ实现链式跳转。
前置准备 ✅
-
VPS:Ubuntu 20.04 或 22.04
-
推荐:1 vCPU / 1GB RAM 起步
-
系统包索引已更新:sudo apt update
示例:检查系统并更新包索引
uname -a # 查看内核与系统信息
lsb_release -a # 查看 Ubuntu 版本
sudo apt update && sudo apt upgrade -yS5协议要点📚
-
工作层次:S5 位于应用层,为客户端提供一个通用的dài lǐ隧道,支持 TCP/UDP。
-
认证方式:可无认证或用户名/密码认证(Dante 支持多种方式)。
-
握手流程(简化):客户端 -> dài lǐ 握手(协商认证方式) -> 验证 -> dài lǐ建立目标连接 -> 数据转发。
-
与 HTTP dài lǐ差异:HTTP dài lǐ理解 HTTP 协议;S5 是通用的字节流转发,适合任意 TCP(甚至 UDP)流量。
VPS安装搭建Dante🛠️
安装Dante
sudo apt update
sudo apt install dante-server -yDante 在 Debian/Ubuntu 的官方仓库中可直接安装,避免从源码编译导致依赖问题。若需要最新版,可考虑源码编译,但本文以仓库安装为主,侧重配置。

主要文件位置:
-
主配置: /etc/danted.conf
-
日志:/var/log/danted.log
-
systemd 服务单元:/lib/systemd/system/danted.service
配置详解(/etc/danted.conf)每一项解释📝
# /etc/danted.conf
# 日志输出
logoutput: /var/log/danted.log
# 监听接口:internal 为 客户端连接的接口
internal: 0.0.0.0 port = 1080
# external 指对外连接出站使用的网络接口(替换为你的网卡名)
external: eth0
# 认证方法:username 表示使用操作系统用户作为认证来源
method: username
# 非特权进程运行用户(降低风险)
user.notprivileged: nobody
user.privileged: root
user.libwrap: nobody
# 客户端访问控制(允许来自任意 IP 的客户端)
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect error
}
# 允许 Socks 代理转发(connect 命令)
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: connect
log: connect disconnect error
}
# 默认拒绝所有其他未匹配规则
block {
log: connect error
}创建认证用户与安全设计🔐
创建专用认证用户:
sudo adduser --disabled-login --gecos "" proxyuser
# 或者更简单的:
# sudo useradd -m proxyuser
# sudo passwd proxyuser--disabled-login 会创建用户但不允许交互式登录(如果需要可去掉),你依然可以为用户设置密码用于 S5 认证。

用户名是:proxyuser,密码就是在设置完成之后,执行:passwd proxyuser后输出的两次密码,输入的密码不会显示,默认都是不显的,不要误以为没有输进去。
启动服务并验证运行状态 ▶️
启动服务:
sudo systemctl enable danted
sudo systemctl start danted
sudo systemctl status danted正常情况下 systemctl status 会显示 active (running)。
如果状态是失败的。

那就继续跟着继续操作👇
先把 danted.conf配置文件里的内容清空,然后将以下配置内容粘贴进去。(假设你的VPS网卡是 eth0,可以用 ip a 确认)
# /etc/danted.conf
# 监听的内部接口(即接收 socks5 请求的网卡)
internal: eth0 port = 1080
# 外部出口网卡(用于访问外网)
external: eth0
# SOCKS 版本
socksmethod: username # 需要用户名密码登录
user.notprivileged: nobody
# 客户端访问控制
clientmethod: none
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect error
}
# 服务端访问控制
socks pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect error
}保存退出之后重启一下服务,然后检查一下服务状态是否是 active (running)。
测试是否成功,在VPS上执行:
curl -x socks5://用户名:密码@你的VPS_IP:1080 https://ipinfo.io能返回JSON格式的内容就是成功了。

之后在本地电脑使用指纹浏览器,填写S5的配置信息,然后测试连接,能够连接成功证明没有问题。

其他使用方法这里我就不演示了,不管是指纹浏览器,还是普通浏览器插件使用,又或者是其他用途,都是可以正常使用的。
Fail2Ban防爆破示例:
Dante 本身日志包含认证失败信息,我们可以写一个 Fail2Ban 过滤器来封禁暴力尝试 IP。
1.安装:
sudo apt install fail2ban -y2.新建 filter 文件 /etc/fail2ban/filter.d/danted.conf,复制粘贴以下配置内容:
[Definition]
failregex = .*authentication from <HOST>.*failed.*
ignoreregex =3.在 /etc/fail2ban/jail.local 添加:
[danted]
enabled = true
port = 1080
filter = danted
logpath = /var/log/danted.log
maxretry = 3
bantime = 36004.重启 fail2ban:
sudo systemctl restart fail2ban后边还有进阶方案,使用Nginx stream将S5封装为TLS。
S5 原生不加密。可用 Nginx 的 stream 模块把流量做 TLS 封装,客户端需要使用 stunnel 或类似工具连接到 Nginx,再由 Nginx 转发到 Dante。
这里我就不演示进阶方案了,可自行问AI。
本期内容到此结束。
三连加关注,追文不迷路。

