Gloxina
格洛西纳
Gloxina

在 Docker 中运行 Hysteria

在 Docker 中运行 Hysteria

Hysteria 是一个强大、快速、抗审查的代理工具。
可能也是最可爱的。
—— Hysteria 官方页面

此页面仅针对 GNU/Linux 给出解决方案,我使用的系统环境为 Debian GNU/Linux,在 Ubuntu GNU/Linux 上也可以正常使用。此页面内容仅作技术交流使用。Hysteria 的官方文档中阐述了在 Docker 中部署 Hysteria 的流程,但是并没有很详细(可能是我没找到详细的文档?),特此记录。

警告:下面的部分操作需要根据实际情况来进行,请根据自身情况修改命令,部分命令需要在具有 root 权限的情况下使用。如果因为误操作造成任何损失,本文作者不承担任何责任。在运行任何命令之前,我认为最好考虑一下这条命令在执行后会发生什么,再按下 Enter 执行它。

准备工作

需要准备的东西:

  • 一个域名,并且解析到你的服务器上
  • 上面那个域名的 SSL 证书,分为证书(certificate.crt)和私钥(private.key)。或者你也可以选择使用 ACME,这需要一个有效的电子邮件地址。
  • Docker
  • 重要文件的备份
  • 清醒的大脑

首先,我们需要 Docker 才能在 Docker 容器中运行 Hysteria。
如果你不知道这是什么,请先访问 Manuals | Docker Docs 学习 Docker 的安装与基本使用方法后再继续阅读此文章。

我们需要 Hysteria 的 Docker 镜像才能运行 Hysteria,使用以下命令拉取 Hysteria 的镜像:

docker pull tobyxdd/hysteria:latest

由于某些原因,在大陆地区拉取镜像可能会失败,这时候需要配置镜像加速来解决此问题(参考:DockerPull 镜像加速 )。在镜像拉取完成后,使用以下命令可以查看本地所有的 Docker 镜像:

docker images

如果一切正常,可以在输出中找到 tobyxdd/hysteria。

完成上述步骤后,我们需要创建几个文件夹,用于存储 Hysteria 的配置文件及 SSL 证书。下面的文件夹仅作示例,可以根据实际情况进行修改,也可以直接 CtrlCV。

mkdir /usr/local/etc/hysteria

如果你选择使用自有证书的话,需要再执行一条:

mkdir /usr/local/etc/hysteria/secret

其中,Hysteria 的配置文件 config.json 放置在 hysteria 目录下,SSL 证书放置在 secret 目录下。

创建容器

这里先解释一下 Docker 中的几个网络模式:

  • host:(主机模式)直接将容器的网络堆栈与主机共享,性能比 Bridge 更好。通俗易懂的来说,就是容器与主机公用一个 IP 地址。这一方式不需要过多配置,适合刚使用 Docker 的新手。
  • bridge:(桥接模式)是 Docker 默认的网络模式,创建了一个虚拟的交换机,用于连接各个容器。每个容器都能分配单独的 IP 地址,容器之间可以直接通过这个 IP 地址或者容器名称进行通信。在不暴露任何端口的情况下,外部网络不能直接与容器进行通信,而容器可以通过 bridge 的 NAT 地址转换来与外界通信(没错,就是臭名昭著的那个 NAT 网络)。由于这个模式类似于创建了一个虚拟交换机,因此性能会比 host 模式稍差,但是几乎可以忽略不计。
  • none:(与世隔绝模式)容器不使用任何网络服务,一般来说根本用不着这玩意。

根据自己的实际情况来选择网络模式,这里以 bridge 模式为例,开放 16384 端口,之后会同时配置 Hysteria 的监听端口为 16384。下面是一个创建容器的示例,可以根据实际情况进行修改,也可以直接 CtrlCV:

docker create --name hysteria --network bridge --publish 16384:16384 --volume /usr/local/etc/hysteria:/etc/hysteria tobyxdd/hysteria server
  • “–name hysteria” 指定了容器的名称为 hysteria
  • “–network bridge” 指定了容器的网络模式为 bridge 模式(如果使用 bridge 模式的话,通常可以省略该选项,因为 bridge 是默认的网络模式)
  • “–publish 16384:16384” 指定了映射容器内的 16384 端口到主机的 16384 端口(注意,需要确保主机的 16384 端口没有被占用)
  • “–volume /usr/local/etc/hysteria:/etc/hysteria” 指定了挂载主机的 “/usr/local/etc/hysteria” 目录(也就是我们上面创建的那个)到容器内的 “/etc/hysteria”
  • “tobyxdd/hysteria” 为镜像名称
  • “server” 指定了 Hysteria 以服务端模式运行,而不是默认的客户端

创建容器后,使用以下命令查看容器列表:

docker ps --all

如果一切正常,可以在输出中找到容器 hysteria。

创建并编辑配置文件&配置证书

Hysteria 配置文件的完全体可以在其官方文档上看到,这里仅写出基本的配置,其他高级用法可以自行研究。根据下面的方法创建 Hysteria 服务端的配置文件:

cd /usr/local/etc/hysteria
sudo nano config.json

进入 nano 编辑器之后,将下面的内容粘贴到编辑器中,需要自行修改相关内容

使用 ACME 的配置文件如下:

# listen: :16384 

acme:
  domains:
    - www.example.com(修改成你的服务器的域名地址)
  email: [email protected] (修改成你的电子邮件地址)

auth:
  type: password
  password: 你的密码

使用自有证书的配置文件如下:

# listen: :16384 

tls:
  cert: /etc/hysteria/secret/certificate.crt 
  key: /etc/hysteria/secret/private.key 

auth:
  type: password
  password: 你的密码

将密码更改为你自己的密码之后,依次按下 Ctrl+X,Y,Enter 来保存并退出 nano 编辑器。如果你选择使用 ACME 的话,你需要修改配置文件中的域名和电子邮件地址。如果你选择使用自有证书的话,将你准备的域名证书和私钥分别重命名为 certificate.crt 和 private.key,并且上传到主机的 “/usr/local/etc/hysteria/secret/” 目录下。

运行容器

使用以下命令来启动容器并查看运行日志:

docker start hysteria
docker logs hysteria

如果一切正常,输出中应该会显示 server up and running。

连接到服务器

使用你的客户端(例如 v2RayN 或者 Sing-Box)连接到服务器,地址为 你的域名:16384

大功告成。

发表回复

textsms
account_circle
email

Gloxina

在 Docker 中运行 Hysteria
Hysteria 是一个强大、快速、抗审查的代理工具。可能也是最可爱的。—— Hysteria 官方页面 此页面仅针对 GNU/Linux 给出解决方案,我使用的系统环境为 Debian GNU/Linux,在 Ub…
扫描二维码继续阅读
2024-07-19