加载中...
Featured image of post 搭建代理小鸡

搭建代理小鸡

在v6小鸡上使用 Hysteria2和V2ray的记录

起因

ZJU 的校园网出口存在限速,而物理上的网线接口却可以跑到千兆,在校内传输时就可以跑满。在很久以前,只要插上网线就能获取到ip地址,同时还可以直接用ipv6跑满带宽。但是在某个暑假的某天,技术中心突然给有线网加了一个网页认证,并且给ipv6也加上了限速。不过虽然存在限速,但ipv6 的速度任可以达到 500Mbps。那么很显然,如果我们能将出口流量全部用ipv6进行转发,那么就可以体验到大带宽。

至于如何建立一个代理,我想这对看这篇文章的诸位不是一个太大的问题。本文在很大程度上是作为我的一个备忘录,之后每次入手新小鸡都可以马上配置,同时记录一些 v6 特有的机制。这里我选用了 Hysteria2Vmess+ws+tls 的组合。

Tabby远程目录

很显然我们需要一个 ssh 客户端,我使用的是 Tabby,但是说实话目前的 Tabby 并不是很好用。

这段命令可以在 Tabby 中的 sftp 显示在当前目录

~/.bash_profile:

1export PS1="$PS1\[\e]1337;CurrentDir="'$(pwd)\a\]'

配置方法

下面进入正式的配置教程

拿到一个带有公网的VPS首先要考虑的肯定是安全性。开启防火墙是第一步,之后为了防止爆破还是建议改为使用密钥登录。

使用密钥登录

生成密钥

1ssh-keygen -t rsa -b 4096

得到结果

 1root@local:~# ssh-keygen -t rsa -b 4096
 2Generating public/private rsa key pair.
 3Enter file in which to save the key (/root/.ssh/id_rsa):
 4Enter passphrase (empty for no passphrase):
 5Enter same passphrase again:
 6Your identification has been saved in /root/.ssh/id_rsa
 7Your public key has been saved in /root/.ssh/id_rsa.pub
 8The key fingerprint is:
 9aa:8b:61:13:38:ad:b5:49:ca:51:45:b9:77:e1:97:e1 root@local
10The key's randomart image is:
11+--[ RSA 2048]----+
12|    .o.          |
13|    ..   . .     |
14|   .  . . o o    |
15| o.  . . o E     |
16|o.=   . S .      |
17|.*.+   .         |
18|o.*   .          |
19| . + .           |
20|  . o.           |
21+-----------------+

公钥会保存在服务端,私钥 ~/.ssh/id_rsa 需要保存在我们自己这作为登录凭证

之后我们将公钥复制到 ~/.ssh/authorized_keys

1cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

~/.ssh/authorized_keys 的权限设置为 600

1chmod 600 ~/.ssh/authorized_keys

将私钥 ~/.ssh/id_rsa 下载到本地

编辑 sshd 文件

1vim /etc/ssh/sshd_config

修改下面几项

1#禁用密码验证
2PasswordAuthentication no
3#启用密钥验证
4PubkeyAuthentication yes
5#指定公钥
6AuthorsizedKeysFile .ssh/authorized_keys

重启 sshd 服务

1systemctl restart sshd

并查看状态

1systemctl status sshd

安装 Hysteria2 和 V2ray

下面就是安装代理环节,如今的安装说实话已经很方便了,唯一值得注意的是有没有遗漏哪个环节

1bash <(curl -fsSL https://get.hy2.sh/) #Hysteria2
2bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh) #V2ray

创建SSL证书

SSL 证书在 Hysteria2 和 V2ray 中都需要使用到,下面我们用 acme.sh 来申请证书

 1
 2#安装acme:
 3curl https://get.acme.sh | sh
 4#安装socat:
 5apt install socat
 6#添加软链接:
 7ln -s  /root/.acme.sh/acme.sh /usr/local/bin/acme.sh
 8#注册账号: 
 9acme.sh --register-account -m my@example.com
10#开放80端口:
11ufw allow 80
12#申请证书: 
13acme.sh  --issue -d yourdomain.com  --standalone -k ec-256
14#安装证书: 
15acme.sh --installcert -d yourdomain.com --ecc  --key-file   /etc/hysteria/server.key   --fullchain-file /etc/hysteria/server.crt 
16#添加权限
17chmod +r /etc/hysteria/server.key
18chmod +r /etc/hysteria/server.crt
19
20#切换 Let’s Encrypt:
21acme.sh --set-default-ca --server letsencrypt
22#切换 Buypass:
23acme.sh --set-default-ca --server buypass
24#切换 ZeroSSL:
25acme.sh --set-default-ca --server zerossl

这里需要注意的是,如果你的的域名解析同时有 AAAAA 解析,证书签发机构访问哪个解析是不知道的,最好保证两个解析都指向你的服务器,如果你的某个ip是仅出站的,建议将其删除。 证书所申请域名是否包含该服务器的所有ip并不重要,如果你只使用代理的话,只要能申请下来证书就可以。如果实在不行也可以使用自签名证书。

Hysteria2

目录默认为 /etc/hysteria,修改下面的 config.yaml 文件

 1listen: :7800 #记得放行该端口
 2
 3#使用CA证书
 4tls: 
 5  cert: /etc/hysteria/server.crt
 6  key: /etc/hysteria/server.key
 7
 8
 9auth:
10  type: password
11  password: yourpassword
12
13# 服务端带宽限制
14bandwidth: 
15  up: 500 mbps
16  down: 500 mbps
17  
18masquerade:
19  type: proxy
20  proxy:
21    url: https://yourdomain.com/
22    rewriteHost: true

随后启动服务

1systemctl start hysteria-server
2systemctl status hysteria-server
3systemctl enable hysteria-server #开机自启

之后在客户端我们就可以进行相应配置

1- name: 'lite'
2  type: hysteria2
3  server: v6.yourdomain.com # 需要指向服务器,不需要证书
4  port: 7800
5  up: ""
6  down: ""
7  password: !977F45&S9v4
8  sni: yourdomain.com # 需要和服务器上的证书相匹配
9  skip-cert-verify: false

这里的 v6.yourdomain.com 专门解析到ipv6的地址上,因为我没明白 mihomo 核心在连接时是如何选择 ipv4 和 ipv6的,不如直接指定到ipv6上。在测试的时候,有时候有ipv6地址但却依然使用ipv4连接,有时候没有ipv6地址却仍使用了ipv6连接导致timeout。

具体 ipversion 配置可以看 mihomo 中的 ip-version 部分,默认使用 dual

不同软件逻辑也确实会不一样。举个例子,Windows会优先使用ipv6连接,而 Chrome 会选择两种中更快的那个(v4会延迟发送)。至于 mihomo 是怎么做的,我就不清楚了,反正也不重要。

上面的配置也可以变为一行

1- { name: 'lite',type: hysteria2,server: v6.yourdomain.com,port: 7800,up: "" ,down: "" ,password: !977F45&S9v4,sni: yourdomain.com,skip-cert-verify: false}

V2ray

目录默认为 /usr/local/etc/v2ray,修改下面的 config.json 文件

 1{
 2    "inbounds": [
 3      {
 4        "port": 8388,//记得放行该端口
 5        "listen":"127.0.0.1",
 6        "protocol": "vmess",
 7        "settings": {
 8          "clients": [
 9            {
10              "id": "4b6b9d51-c9aa-4ac8-9811-8726a23e480a", //替换4UUID
11              "alterId": 0
12            }
13          ]
14        },
15        "streamSettings": {
16          "network": "ws",
17          "wsSettings": {
18          "path": "/4b6b9d51-c9aa-4ac8-9811-8726a23e480a"
19          }
20        }
21      }
22    ],
23    "outbounds": [
24      {
25        "protocol": "freedom",
26        "settings": {}
27      }
28    ]
29  }
1systemctl start v2ray
2systemctl status v2ray
3systemctl enable v2ray #开机自启

这样在客户端做如下配置

1- { name: 'lite-vmess', type: vmess, server: v6.yourdomain.com, port: 443, uuid: 4b6b9d51-c9aa-4ac8-9811-8726a23e480a,alterId: 0, udp: true,tls: true,cipher: zero ,skip-cert-verify: false,network: ws, ws-opts: { path: /4b6b9d51-c9aa-4ac8-9811-8726a23e480a, headers: { Host: yourdomain.com } } }

这里大部分配置都很清晰,需要说明的是证书需要和 Host 一致

Nginx

最后我们来配置nginx ,配置在 /etc/nginx/nginx.conf 中,修改 http 部分

 1http {
 2   server {
 3   listen 443 ssl;
 4   listen [::]:443 ssl;
 5
 6   server_name yourdomain.com;
 7   ssl_certificate       /etc/hysteria/server.crt; 
 8   ssl_certificate_key   /etc/hysteria/server.key;
 9   ssl_session_timeout 1d;
10   ssl_session_cache shared:MozSSL:10m;
11   ssl_session_tickets off;
12
13   ssl_protocols         TLSv1.2 TLSv1.3;
14   ssl_ciphers           ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
15   ssl_prefer_server_ciphers off;
16    
17    location /4b6b9d51-c9aa-4ac8-9811-8726a23e480a {
18       proxy_redirect off;
19       proxy_pass http://127.0.0.1:8388;
20       proxy_http_version 1.1;
21       proxy_set_header Upgrade $http_upgrade;
22       proxy_set_header Connection "upgrade";
23       proxy_set_header Host $host;
24       proxy_set_header X-Real-IP $remote_addr;
25       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
26   }
27
28}
29
30}
1systemctl start nginx
2systemctl status nginx
3systemctl enable nginx #开机自启

如此我们就完成了

最后测试一下就能看到效果了

Licensed under CC BY-NC-SA 4.0
最后更新于 Aug 25, 2025 18:42 UTC