仅需两分钟 用docker启动一个hysteria2服务端
本帖最后由 岱岳之上的天 于 2024-12-5 16:57 编辑省流总结:
本文将教你如何在最短时间内,使用docker启动一个hysteria2服务端,以供客户端来使用
-----------------------------------------------------------
前言:
在跟随本文完成相应步骤之前,你需要确定你的vps安装了docker和docker compose(如果是官方渠道安装的,那么已经包含了compose组件了,但如果是通过linux系统自身的包管理器安装的,那么还需要额外安装一下docker-compose)
那么,如何通过官方脚本安装docker呢?
[*]curl https://get.docker.com | bash复制代码
-----------------------------------------------------------
正文:
1.首先,需要先切换到一个合适的目录,比如你的ssh连接使用的是root用户登录的话,那就使用 /root 目录好了。
[*]cd ~复制代码
2.在此目录下创建一个文件夹并为其取一个合适的名字,如果没什么主意嘛,那就叫它hysteria好了。
[*]mkdir hysteria复制代码
3.随后,进入这个文件夹,新建一个文件名为 docker-compose.yml。
[*]cd hysteria
[*]vim docker-compose.yml复制代码
在里面粘贴以下内容。
[*]services:
[*]hysteria:
[*] image: 'tobyxdd/hysteria:latest'
[*] container_name: hysteria-server
[*] restart: always
[*] network_mode: host
[*] volumes:
[*] - '$PWD/:/etc/hysteria'
[*] environment:
[*] - HYSTERIA_DISABLE_UPDATE_CHECK = 1
[*] cap_add:
[*] - NET_ADMIN
[*] - NET_BIND_SERVICE
[*] - SYS_PTRACE
[*] - DAC_READ_SEARCH
[*] devices:
[*] - '/dev/net/tun:/dev/net/tun'
[*] ulimits:
[*] nofile:
[*] soft: 65535
[*] hard: 65535
[*] deploy:
[*] resources:
[*] limits:
[*] cpus: '0.5'
[*] memory: 256M
[*] command: ["server", "-c", "/etc/hysteria/config.yaml"]复制代码
正如所看到的一样,这个compose文件为这个容器施加了一定的资源限制(0.5核心使用量,256M内存),若vps剩余资源充足(如2G以上运行内存的机器),则可以按需修改limits下的cpus和memory的值来为这个容器分配更多的资源。
如果没什么要修改的了,那就,保存,退出。
4.然后,再在当前目录下新建一个文件,名为 config.yaml。
[*]vim config.yaml复制代码
将以下内容粘贴到文件里(请在粘贴之前,暂时先将此处的内容放到一个文本编辑器里,按需修改文件中的值并删除以井号开头的汉字注释)
[*]listen: :443 # 这是服务端所使用的端口号,可以按需修改(如可将443修改为所需要的其他端口号)
[*]
[*]ignoreClientBandwidth: false
[*]speedTest: false
[*]disableUDP: false
[*]udpIdleTimeout: 60s
[*]
[*]
[*]tls:
[*]cert: /etc/hysteria/server.pem# 此处的ssl证书和密钥需要放到上方步骤中提到的,已经新建的目录下
[*]key: /etc/hysteria/server.key
[*]sniGuard: disable
[*]
[*]quic:
[*]initStreamReceiveWindow: 1048576# 如果你的vps剩余资源充裕,且您需要达到100mbps以上的速率,请直接删除此处的quic字段
[*]maxStreamReceiveWindow: 1048576
[*]initConnReceiveWindow: 4194304
[*]maxConnReceiveWindow: 4194304
[*]maxIdleTimeout: 30s
[*]maxIncomingStreams: 65535
[*]disablePathMTUDiscovery: true
[*]
[*]bandwidth:
[*]up: 100 mbps# brutal模式下的速度限制,可以按需修改
[*]down: 100 mbps
[*]
[*]auth:
[*]type: password
[*]password: password1 # 客户端连接时的认证密码,必须修改为别的值(不含特殊符号),请确保密码难以猜测
[*]
[*]resolver:
[*]type: tls # 如果需要让服务端程序直接使用系统的DNS解析,请直接删除此字段
[*]tls:
[*] addr: 208.67.220.220:853
[*] timeout: 4s
[*] sni: dns.opendns.com
[*] insecure: true
[*]
[*]sniff:
[*]enable: true
[*]timeout: 2s
[*]rewriteDomain: false
[*]tcpPorts: 80,443,8000-9000
[*]udpPorts: all
[*]
[*]outbounds:
[*]- name: freedom # 若无特殊需要,则无需额外修改此处的字段
[*] type: direct
[*] direct:
[*] mode: auto
[*]
[*]masquerade: # 伪装字段,若不需要可删除,若需要可按需修改
[*]type: string
[*]string:
[*] content: Invalid request, please use correct method.
[*] headers:
[*] Server: quic-server
[*] Content-Type: application/octet-stream; charset=UTF-8
[*] Cache-Control: no-store
[*] Content-Length: 8
[*] Content-Encoding: compress
[*] Connection: close
[*] statusCode: 200复制代码
如果没有什么需要修改的了,那就保存,退出即可。
5.请继续留在已经新建的目录下,让我们来生成一个自签名证书。
[*]openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:4096 -keyout server.key -out server.pem复制代码
命令运行后签发证书时会提示填写相应信息,按照自己的需要按需填写就好,如果不确定应该填写什么,可以全部填写nu这两个字母(意为null),进行完这个步骤后,生成的证书会放在新建的目录下
6.此时就可以启动hysteria服务端来试试了
[*]docker compose up -d复制代码
若为通过linux源安装的docker-compose,只需要小小修改:
[*]docker-compose up -d复制代码
到此就结束了,此时就可以看看hysteria服务启动没有:
[*]docker container ls复制代码
如果返回输出为以下类似情形,则它就跑起来了,在确保防火墙放行相应端口号的情况下,就可以在本地客户端填写一下相应服务器的连接信息来测试一下了。
[*]CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[*]8ad83a750000 tobyxdd/hysteria:latest "hysteria server -c …" 1 min ago Up 1 mins hysteria-server复制代码
-----------------------------------------------------
常见问题:
1.为什么启动后,当我查看结果时发现处于 restarting... 状态?
答:这说明刚才config文件填写有误,比如缩进错误(yml文件严格要求缩进格式),比如使用了不被允许的符号作为密码,比如生成证书的时候没有成功,比如其他设置项的值填写的不正确等等,可以挨个检查一下。
2.我怎么查看服务端运行状态呢?
答:
[*]docker logs hysteria-server复制代码
3.状态为Up,logs也没看出问题,我为什么就是连不上?
答:遇到这种情况可能是由于vps本身的防火墙,或者服务提供商的安全组规则没有放行对应端口导致的。具体可以根据vps本身所用的防火墙软件来查询怎么放行对应端口。或者查找相应的帮助文档来了解怎么在服务提供商的安全组里面放行对应端口。
除此之外还有可能是本地连接信息填写的不正确导致的,比如说连接密码,比如自签名证书要 允许不安全连接(意思是跳过证书验证),比如本地客户端填写的服务器端口不对等等可能的远因,可以挨个排查一下。
4.我以后要升级服务端版本怎么办?
首先,执行[*]docker image ls复制代码查看hysteria那个image的前四位image id,然后进入到当时建立的那个配置目录下,执行。
[*]docker compose down && docker image rm 前四位id && docker compose up -d复制代码
这样就能确保其重新拉取最新的镜像启动了。 恩,写的很好,我用XUI 歇斯底里2,确实很好用。
页:
[1]