省流总结:
本文将教你如何在最短时间内,使用docker启动一个hysteria2服务端,以供客户端来使用
-----------------------------------------------------------
前言:
在跟随本文完成相应步骤之前,你需要确定你的vps安装了docker和docker compose(如果是官方渠道安装的,那么已经包含了compose组件了,但如果是通过linux系统自身的包管理器安装的,那么还需要额外安装一下docker-compose)
那么,如何通过官方脚本安装docker呢?
[ol]curl https://get.docker.com | bash[/ol]复制代码
-----------------------------------------------------------
正文:
1.首先,需要先切换到一个合适的目录,比如你的ssh连接使用的是root用户登录的话,那就使用 /root 目录好了。
[ol]cd ~[/ol]复制代码
2.在此目录下创建一个文件夹并为其取一个合适的名字,如果没什么主意嘛,那就叫它hysteria好了。
[ol]mkdir hysteria[/ol]复制代码
3.随后,进入这个文件夹,新建一个文件名为 docker-compose.yml。
[ol]cd hysteria
vim docker-compose.yml[/ol]复制代码
在里面粘贴以下内容。
[ol]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"][/ol]复制代码
正如所看到的一样,这个compose文件为这个容器施加了一定的资源限制(0.5核心使用量,256M内存),若vps剩余资源充足(如2G以上运行内存的机器),则可以按需修改limits下的cpus和memory的值来为这个容器分配更多的资源。
如果没什么要修改的了,那就,保存,退出。
4.然后,再在当前目录下新建一个文件,名为 config.yaml。
[ol]vim config.yaml[/ol]复制代码
将以下内容粘贴到文件里(请在粘贴之前,暂时先将此处的内容放到一个文本编辑器里,按需修改文件中的值并删除以井号开头的汉字注释)
[ol]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[/ol]复制代码
如果没有什么需要修改的了,那就保存,退出即可。
5.请继续留在已经新建的目录下,让我们来生成一个自签名证书。
[ol]openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:4096 -keyout server.key -out server.pem[/ol]复制代码
命令运行后签发证书时会提示填写相应信息,按照自己的需要按需填写就好,如果不确定应该填写什么,可以全部填写nu这两个字母(意为null),进行完这个步骤后,生成的证书会放在新建的目录下
6.此时就可以启动hysteria服务端来试试了
[ol]docker compose up -d[/ol]复制代码
若为通过linux源安装的docker-compose,只需要小小修改:
[ol]docker-compose up -d[/ol]复制代码
到此就结束了,此时就可以看看hysteria服务启动没有:
[ol]docker container ls[/ol]复制代码
如果返回输出为以下类似情形,则它就跑起来了,在确保防火墙放行相应端口号的情况下,就可以在本地客户端填写一下相应服务器的连接信息来测试一下了。
[ol]CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ad83a750000 tobyxdd/hysteria:latest "hysteria server -c …" 1 min ago Up 1 mins hysteria-server[/ol]复制代码
-----------------------------------------------------
常见问题:
1.为什么启动后,当我查看结果时发现处于 restarting... 状态?
答:这说明刚才config文件填写有误,比如缩进错误(yml文件严格要求缩进格式),比如使用了不被允许的符号作为密码,比如生成证书的时候没有成功,比如其他设置项的值填写的不正确等等,可以挨个检查一下。
2.我怎么查看服务端运行状态呢?
答:
[ol]docker logs hysteria-server[/ol]复制代码
3.状态为Up,logs也没看出问题,我为什么就是连不上?
答:遇到这种情况可能是由于vps本身的防火墙,或者服务提供商的安全组规则没有放行对应端口导致的。具体可以根据vps本身所用的防火墙软件来查询怎么放行对应端口。或者查找相应的帮助文档来了解怎么在服务提供商的安全组里面放行对应端口。
除此之外还有可能是本地连接信息填写的不正确导致的,比如说连接密码,比如自签名证书要 允许不安全连接(意思是跳过证书验证),比如本地客户端填写的服务器端口不对等等可能的远因,可以挨个排查一下。
4.我以后要升级服务端版本怎么办?
首先,执行[ol]docker image ls[/ol]复制代码查看hysteria那个image的前四位image id,然后进入到当时建立的那个配置目录下,执行。
[ol]docker compose down && docker image rm 前四位id && docker compose up -d[/ol]复制代码
这样就能确保其重新拉取最新的镜像启动了。