甲骨文云一台 VPS 绑定 5 个公网 IP:Ubuntu + Dante 自建 SOCKS5 静态代理完整教程

配套视频约 22 分 39 秒。可以先看完整演示,再按本文复制命令;章节跳转见文末。

手里的甲骨文云 VPS,还只用着一个公网 IP?这篇教程把本期实操完整整理出来:在同一台 AMD VPS 的虚拟网卡上增加四个辅助私网 IP,分别关联公网 IP,再用 Ubuntu 和 Dante,把一台服务器变成五个可以逐个选择的 SOCKS5 出口。

重点是每个入口对应自己的公网出口。不是简单开五个端口,也不用为五个出口再开五台机器。

先确认两件事:能创建额外公网 IP,不等于你的账号一定有免费额度;请先看控制台配额、创建费用提示与实际账单。这里得到的是云服务器 IP,通常属于数据中心 IP,不是住宅 IP 或平台通过率的保证。

本期配套配置文件
下载 Netplan + Dante 配置示例

含 60-secondary-ips.yaml、danted.conf.example 和使用说明;不含密码、密钥或真实公网地址。替换为自己的地址后再使用。

开始前:准备环境与地址对照表

本期演示环境是一台已经创建好的甲骨文云 AMD VPS,系统为 Ubuntu 24.04,只有一张主 VNIC,网卡名为 ens3。你需要能通过 SSH 登录,并有 sudo 权限。还没有账号或机器,可以先看甲骨文云注册教程。

先记下自己的五组地址。下面私网 IP 是本期演示值,公网部分已隐藏中间两段。不要把表里的私网 IP 当成你的实际地址,更不能把带星号的公网 IP 填进客户端。

用途 Ubuntu 使用的私网 IP 云端对应公网 IP(脱敏)
主地址 10.0.0.147 138.***.***.251
辅助地址 1 10.0.0.141 129.***.***.149
辅助地址 2 10.0.0.116 64.***.***.147
辅助地址 3 10.0.0.120 64.***.***.221
辅助地址 4 10.0.0.117 217.***.***.91
终端实录:一台 AMD VPS 的五组私网 IP 与对应公网 IP
本期真实演示:同一台 VPS,五个公网出口;公网地址中间两段已隐藏。(点击查看大图)

本篇按单网卡、同子网的场景讲解。网卡名、子网前缀、主地址都以你自己的机器为准;多网卡或不同网关的环境不能直接套用这里的配置。

一、公网 IP 为什么不直接写进 Ubuntu?

在这套方案里,公网地址在 Oracle Cloud 侧关联到 VNIC 的私网地址。Ubuntu 网卡上添加的是辅助私网 IP,浏览器填写的则是与它关联的公网 IP。这两处不要填反。

连接路径
浏览器 → 第一个公网 IP:1080
      → 云端映射到 10.0.0.141:1080
      → Dante 以 10.0.0.141 作为出口来源
      → 云端映射为对应公网 IP → 目标网站

同一台 VPS 可以有多个辅助私网地址。每个地址关联自己的公网 IP,才有后面的五组入口与出口。如果只增加端口、仍从默认来源地址发出,目标网站可能始终看到同一个公网 IP。Oracle 官方私网 IP 说明也说明了辅助私网地址与预留公网 IP 的关联能力。

二、甲骨文云后台:把五组地址准备好

  1. 进入 计算 → 实例,打开这台 AMD VPS。
  2. 找到附加的 VNIC,打开原来的主虚拟网卡,不必为本例另建一张网卡。
  3. 进入 IP 管理 / IPv4 地址,选择分配辅助私网 IP。
  4. 在该 VNIC 的子网中分配一个未占用地址,记下实际生成的值。
  5. 为这个辅助私网地址分配或关联预留公网 IP(Reserved Public IP),设置便于辨认的名称,例如 network02。
  6. 重复三次,得到四个辅助私网地址;加上原来的主地址,一共五组。
Oracle Cloud VNIC 的 IP 管理入口
从实例进入主 VNIC,找到 IPv4 地址管理;界面文字可能随控制台版本变化。(点击查看大图)
为辅助私网地址关联预留公网 IP 的控制台表单
每次都记录“私网 IP ↔ 公网 IP”的对应关系,不要只记公网地址。(点击查看大图)

视频把“临时”切换为“预留”,是为了给辅助地址关联对应类型的公网资源。Oracle 的临时公网 IP 与预留公网 IP 适用对象不同;辅助私网地址使用预留公网 IP。具体规则可核对Oracle 公网 IP 官方文档。

Oracle Cloud 中已完成的五组 IPv4 地址关联
云端配置完成后,五组地址都关联到同一台机器。下一步还要让 Ubuntu 识别辅助地址。(点击查看大图)

三、Ubuntu:让系统真正用上这些地址

1. 先查网卡、主地址和默认路由

BASH
ip -br -4 addr
ip route
ls -la /etc/netplan/

本期检查到网卡名为 ens3,主地址为 10.0.0.147/24。你的网卡可能叫其他名字,地址也可能不在同一网段。后面的 ens3、四个辅助 IP 和 /24,都要按自己的实际情况修改。

2. 先添加第一个辅助私网 IP

BASH
sudo ip addr add 10.0.0.141/24 dev ens3
ip -br -4 addr show dev ens3

看到新地址出现后,再添加另外三个。若提示 File exists,先检查地址是否已存在,不要反复执行添加。

BASH
sudo ip addr add 10.0.0.116/24 dev ens3
sudo ip addr add 10.0.0.120/24 dev ens3
sudo ip addr add 10.0.0.117/24 dev ens3
ip -br -4 addr show dev ens3
Ubuntu ens3 网卡添加四个辅助私网地址
网卡上应有一个主地址,加四个辅助地址。这里填写的是私网 IP。(点击查看大图)

3. 指定来源地址,逐一核对公网出口

BASH
for src in 10.0.0.147 10.0.0.141 10.0.0.116 10.0.0.120 10.0.0.117; do
  printf '%s -> ' "$src"
  curl --interface "$src" -4 --max-time 15 https://api.ipify.org
  printf '\n'
done

--interface 指定这次请求使用的来源私网地址,-4 只测试 IPv4。把五次返回结果,与云端的五组关联逐一对照;不要只看“能上网”,还要看“出口是否对应”。

4. 单独保存 Netplan 辅助配置

刚才的 ip addr add 是临时配置,重启后可能消失。本期原有配置是 50-cloud-init.yaml,保留其中的 DHCP、网关和主地址,只新增辅助文件。先备份当前目录,再编辑新文件:

BASH
sudo cp -a /etc/netplan "/etc/netplan.backup-$(date +%Y%m%d-%H%M%S)"
sudo nano /etc/netplan/60-secondary-ips.yaml
/etc/netplan/60-secondary-ips.yaml
network:
  version: 2
  ethernets:
    ens3:
      addresses:
        - 10.0.0.141/24
        - 10.0.0.116/24
        - 10.0.0.120/24
        - 10.0.0.117/24

这里只增加四个辅助地址,不把主地址重复写一遍,也不重建默认网关。新旧文件必须匹配同一个 Netplan 设备 ID;如果原配置通过 match 或其他名称标识网卡,请先适配设备段。YAML 用空格缩进,不要用 Tab。

Netplan 辅助私网 IP 持久化配置示例
保留原配置,新建 60-secondary-ips.yaml;四个地址按实际分配值修改。(点击查看大图)

5. 检查并应用

BASH
sudo chmod 600 /etc/netplan/60-secondary-ips.yaml
sudo netplan generate
sudo netplan try --timeout 120

视频中直接执行 sudo netplan apply。图文版建议远程修改时先使用 netplan try:确认网络仍正常,再按提示接受配置;同时保留第二个 SSH 会话和云控制台恢复入口。try 的回退也不能代替备份与事后检查。格式报错时先修正,不要继续应用。

BASH
ip -br -4 addr show dev ens3
ip route

安排方便恢复的时间重启,再重复“五个来源地址”的出口测试。这样才能确认持久化也已完成,而不是当前终端里暂时有效。Netplan 配置文档。

四、Dante:把五个出口变成 SOCKS5 代理

1. 安装软件与创建专用账号

BASH
sudo apt update
sudo apt install -y dante-server
command -v danted
sudo systemctl stop danted

sudo useradd --shell /usr/sbin/nologin --no-create-home money
id money
sudo passwd money

如果 money 账号已存在,跳过 useradd,检查是否确实为你准备的代理专用账号。passwd 会交互式要求输入两次密码,输入时不显示字符是正常的;不要使用 root 的 SSH 密码作为代理密码。

2. 备份并编辑配置文件

BASH
sudo cp -a /etc/danted.conf "/etc/danted.conf.bak-$(date +%Y%m%d-%H%M%S)"
sudo nano /etc/danted.conf

下面是按本期方案整理的完整示例。替换所有私网 IP;用户名如有修改,最后的 user: money 也要一起改。图文版明确限定为 TCP CONNECT,并限定使用 money 账号,适合本文的浏览器网页测试。

/etc/danted.conf
logoutput: syslog

# 五个监听地址:填写系统中真实存在的私网 IP
internal: 10.0.0.147 port = 1080
internal: 10.0.0.141 port = 1080
internal: 10.0.0.116 port = 1080
internal: 10.0.0.120 port = 1080
internal: 10.0.0.117 port = 1080

# 五个可用的出口来源地址
external: 10.0.0.147
external: 10.0.0.141
external: 10.0.0.116
external: 10.0.0.120
external: 10.0.0.117
external.rotation: same-same

# 使用系统账号密码;普通工作进程降低权限
user.privileged: root
user.unprivileged: nobody
clientmethod: none
socksmethod: username

# 服务器本机测试及外部连接均先经过这层规则。
# 外部来源必须同时受 OCI 安全列表/NSG 的客户端 /32 白名单限制。
client pass {
  from: 0.0.0.0/0 to: 0.0.0.0/0
  log: connect disconnect error
}

# 本文只配置浏览器网页使用的 TCP CONNECT,并限定代理账号。
socks pass {
  from: 0.0.0.0/0 to: 0.0.0.0/0
  command: connect
  protocol: tcp
  socksmethod: username
  user: money
  log: connect disconnect error
}
Dante 的五条 internal 监听及五条 external 出口配置
五个 internal 使用同一个端口,但监听地址不同;external 列出允许使用的五个来源地址。(点击查看大图)

这份配置的核心是 external.rotation: same-same:连接被哪个本地地址接收,就选择同一个地址作为向外连接的来源,再由云端映射为对应公网 IP。socksmethod: username 则启用系统账号密码认证。参见Dante 官方配置手册。

注意:clientmethod: none 不等于 SOCKS5 免密码;后续 SOCKS 请求仍需通过 username 认证。示例规则中的全来源地址也不能代替外层白名单,下一节必须限制外部连接来源。

3. 校验语法、启动服务、查看五个监听

BASH
sudo /usr/sbin/danted -V -f /etc/danted.conf
sudo systemctl restart danted
sudo systemctl enable danted
systemctl --no-pager --full status danted
sudo ss -lntp | grep ':1080'

先确认大写 -V 校验没有报错,再启动。服务应为 active (running),并出现五个不同私网地址的 :1080 监听。如果失败,先查看日志:

BASH
sudo journalctl -u danted -n 80 --no-pager
Dante 启动后检查 1080 端口的五条监听
端口相同,监听地址各不相同。只出现一条时,应回头检查 internal 配置和系统网卡地址。(点击查看大图)

4. 先在服务器本机测试

先验证第一条辅助地址。下面在 Bash 中执行,密码采用隐藏输入;变量形式避免把密码字面量写进命令历史,但不是对本机其他高权限进程的隐藏保证。

BASH
read -r -s -p "SOCKS password: " SOCKS_PASS; echo
curl --socks5-hostname 10.0.0.141:1080 \
  --proxy-user "money:${SOCKS_PASS}" \
  -4 --max-time 15 https://api.ipify.org
unset SOCKS_PASS

返回值应与 10.0.0.141 在云端关联的公网 IP 一致。本期脱敏示例为 129.***.***.149。这里验证的是代理链路;前面 curl --interface 验证的是系统来源地址,两步都通过,排错会容易很多。

视频命令勘误:https://api.ipify.org 这一行末尾不要再加反斜杠。unset SOCKS_PASS 是下一条独立命令;若把它接到 curl 后面,会被当成额外参数,产生与真实出口查询无关的错误。

五、放行 1080,同时限制谁能连接

外部客户端能否连接,要同时经过服务器防火墙与 OCI 安全列表 / NSG。本机测试成功,不代表外网已经放行。这里不需要改 SSH 端口,也不需要清空现有规则。

1. 服务器侧:检查现有规则

BASH
sudo iptables -S INPUT

视频先用下面的命令演示“放行 TCP 1080”的作用,然后在云端限制来源。它会允许任意来源访问该端口,不要把它误解成白名单:

BASH
sudo iptables -I INPUT -p tcp --dport 1080 -j ACCEPT

长期使用时,建议改成只允许你的客户端公网 IP。先在你自己的电脑或当前客户端网络确认公网出口,再填写下面变量;如果电脑通过其他网络中转,应以服务器实际看到的连接来源为准。

BASH
CLIENT_CIDR='替换为你的客户端公网IP/32'
sudo iptables -I INPUT 1 -p tcp -s "$CLIENT_CIDR" --dport 1080 -j ACCEPT

这条命令只是增加允许规则,不会自动删除已经存在的“全来源允许”。如果你刚执行过视频那条全开放规则,请在白名单添加成功后,删除那条完全相同的演示规则:

BASH
sudo iptables -D INPUT -p tcp --dport 1080 -j ACCEPT
sudo iptables -S INPUT

只有存在这条完全相同的规则时才执行删除;不要按猜测的行号删除其他规则。还要检查其他历史放行项和默认策略。若你的系统通过 UFW 或 nftables 管理防火墙,按现有管理方式配置,不要混用整套规则。iptables 的临时变更也要按你现有方式持久化,并在重启后复查。

2. 云端侧:安全列表或 NSG 中添加白名单

字段 本例填写
规则方向 入站
来源类型 CIDR
来源 CIDR 你的客户端公网 IP/32
IP 协议 TCP
源端口 保留全部 / 留空
目的端口 1080
连接跟踪 使用有状态规则

到实例使用的 VNIC / 子网,确认实际生效的安全列表;如果还绑定 NSG,要一并检查。OCI 允许规则叠加生效:新增一条 /32 不能抵消旧的 0.0.0.0/0 放行规则,旧的全开放项也要处理。家庭宽带公网 IP 变化后,白名单要同步更新。

Oracle Cloud 安全列表中检查入站来源和端口
检查所有生效规则,确认放行的是你的客户端来源与 TCP 1080。(点击查看大图)

端口可以更换,但 Dante 的监听、服务器防火墙、云端安全规则和客户端必须一致。更换端口不能代替密码和来源限制。SOCKS5 本身也不是加密隧道;需要保护客户端到服务器这段传输时,应使用合适的加密连接。

六、比特浏览器:从外部验证入口与出口

  1. 打开比特浏览器,在浏览器窗口管理中点击创建窗口。
  2. 填写一个能辨认的窗口名,例如“甲骨文云出口 1”。
  3. 在代理设置中选择自定义代理,代理类型选择 SOCKS5。
  4. 主机填写第一组完整公网 IP,不是 10.0.0.x;端口填写 1080,用户名填写 money。
  5. 输入你自己设置的密码,完成代理检测并保存窗口。
  6. 打开该窗口,访问 WHOER,检查实际出口。
比特浏览器填写 SOCKS5 公网主机地址与 1080 端口
客户端填公网地址,Ubuntu / Dante 填私网地址;密码不要出现在截图或公开留言中。(点击查看大图)

先看 IP 地址是否与这组入口对应,再看 IP 类型和页面给出的欺诈分值。云服务器通常被识别为数据中心 / 托管 IP;这些标签与分值仅是检测服务的结果,不能代表每个网站都会做出相同判断。

WHOER 检查 SOCKS5 出口 IP 类型与页面评分
本期页面显示的机房类型与分值只对应当时这次检测,不是对所有甲骨文 IP 的承诺。(点击查看大图)

然后再建第二个窗口,只把主机换成另一组公网 IP,保持端口和账号一致。分别验证出口已切换。视频用客户端演示代表性入口;如果要把五组都投入使用,请把五组逐一验收,并在服务器重启后复测。

验收标准:五组私网地址已存在;指定来源测试得到各自公网 IP;Dante 五条监听正常;错误密码不能通过;客户端访问被来源白名单限制;每组代理的实际出口与云端关联一致;重启后配置仍有效。

常见问题与故障排查

为什么开了五个端口,最后还是同一个 IP?

端口与公网出口不是一回事。依次检查云端关联、Ubuntu 的辅助地址、Dante 的 external 列表与 same-same 配置;先用 curl –interface 分离系统网络问题,再测代理。

ip addr add 提示 Cannot assign requested address 或测试来源失败?

核对 IP 是否属于该 VNIC、子网前缀和网卡是否正确。添加地址后用 ip -br -4 addr 复查;不要在系统里直接添加云端显示的公网地址。

本机 curl 成功,外部连接却超时?

先看服务是否监听正确私网地址,再检查服务器防火墙、OCI 安全列表/NSG、客户端公网来源和端口。某一条允许规则存在,不代表其他层已配好。

连接成功但认证失败?

确认 money 账号存在、密码输入正确、socksmethod 为 username。若你修改了专用用户名,配置里的 user 也要同步;先查看 danted 服务日志。

重启后辅助 IP 消失,或者 Dante 无法启动?

检查 Netplan 配置是否合并到正确设备、文件权限是否正确,再执行 netplan generate。地址尚未出现时 Dante 就启动,也可能导致绑定失败,需结合启动日志排查网络就绪顺序。

这是不是五个独立服务器?

不是。五个 IP 共用同一台 VPS 的 CPU、内存、带宽与可用性;服务器停机时,五个代理都会受影响。

能保证住宅属性、低欺诈分值或账号安全吗?

不能。IP 属性、历史与目标平台的判断各不相同。自建只让你控制代理和出口选择,不会自动改变地址所属网络,也不能保证平台接受。

其他 VPS 厂商也能这样配置吗?

思路可参考,但公网 IP 分配、额外费用、网关、路由与系统网络配置可能完全不同。先核对厂商文档,不要把 Oracle 的私网映射方式原样照搬。

视频章节与延伸阅读

以上按本期最终章节时间整理;网页跳转使用整秒,原片结束约为 22:39。

继续学习

核对资料

这套方案的价值,是让一台机器提供多个可以选择和验证的固定出口。把云端关联、系统网络、代理认证和访问限制这几层分别跑通,后续排错与维护才会清楚。

你现在进行到哪一步了?

欢迎在评论区留下具体步骤与报错文字。公开截图前,请遮住密码和真实公网 IP。

加入频道会员 · 更多实战内容

也欢迎订阅 MoneyMoneyHome,或加入电报交流群交流。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注