这个问题已经困扰我3天了,一直没有解决,请教一下各位18cm的mjj该如何解决这个问题。
我使用了 docker compose 部署了 V2Ray 的 vmess + tls + ws 方案,容器可以正常运行,却一直无法连接。
下面的是我的配置文件,麻烦帮忙看一下,配置是否出错了。
docker-compose.yml (docker compose 配置文件)
- version: '3'
services:
nginx:
# 镜像
image: nginx
# 容器名
container_name: nginx
# 端口
ports:
# 80 端口
- "80:80"
# 443 端口
- "443:443"
# 数据卷
volumes:
# Nginx 配置文件夹
- "./nginx/config:/etc/nginx/conf.d"
# Nginx 站点的根目录
- "./nginx/html:/html"
# Nginx 日志文件夹
- "./nginx/log:/log"
# SSL 证书文件夹
- "./nginx/ssl:/ssl"
# 在容器退出时,总是重启容器
restart: always
v2ray:
# 镜像
image: v2ray/official
# 容器名
container_name: v2ray
# 数据卷
volumes:
# V2Ray 配置文件
- ./v2ray/config/config.json:/etc/v2ray/config.json
# V2Ray 访问日志文件
- ./v2ray/log/access.log:/var/log/v2ray/access.log
# V2Ray 错误日志文件
- ./v2ray/log/error.log:/var/log/v2ray/error.log
# 在容器退出时,总是重启容器
restart: always
v2ray.conf (Nginx 配置文件)
- server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /path/to/cert/file;
ssl_certificate_key /path/to/cert/file;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
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;
ssl_prefer_server_ciphers off;
server_name domain.com;
# 与 V2Ray 配置中的 path 保持一致
location /v2ray {
# WebSocket协商失败时返回404
if ($http_upgrade != "websocket") {
return 404;
}
proxy_redirect off;
# 假设WebSocket监听在环回地址的10000端口上
proxy_pass http://v2ray:1024;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
# Show real IP in v2ray access.log
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 访问日志
access_log/log/domain.com.log;
}
V2Ray 服务器配置文件
- {
"log": {
"loglevel": "warning",
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log"
},
"inbounds": [
{
"port": 1024,
"listen":"127.0.0.1",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "uuid",
"alterId": 0
}
] },
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/v2ray"
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
}
]}
V2Ray 客户端配置文件
// 通过 V2RayN 导出为客户端配置文件
{
"policy": {
"system": {
"statsOutboundUplink": true,
"statsOutboundDownlink": true
}
},
"log": {
"access": "",
"error": "",
"loglevel": "warning"
},
"inbounds": [
{
"tag": "socks",
"port": 10808,
"listen": "127.0.0.1",
"protocol": "socks",
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
] },
"settings": {
"auth": "noauth",
"udp": true,
"allowTransparent": false
}
},
{
"tag": "http",
"port": 10809,
"listen": "127.0.0.1",
"protocol": "http",
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
] },
"settings": {
"udp": false,
"allowTransparent": false
}
},
{
"tag": "api",
"port": 59712,
"listen": "127.0.0.1",
"protocol": "dokodemo-door",
"settings": {
"udp": false,
"address": "127.0.0.1",
"allowTransparent": false
}
}
],
"outbounds": [
{
"tag": "proxy",
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "domain.com",
"port": 443,
"users": [
{
"id": "uuid",
"alterId": 0,
"email": "t@t.tt",
"security": "auto"
}
] }
] },
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"allowInsecure": true,
"serverName": "domain.com"
},
"wsSettings": {
"path": "/v2ray",
"headers": {
"Host": "domain.com"
}
}
},
"mux": {
"enabled": false,
"concurrency": -1
}
},
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
},
{
"tag": "block",
"protocol": "blackhole",
"settings": {
"response": {
"type": "http"
}
}
}
],
"stats": {},
"api": {
"tag": "api",
"services": [
"StatsService"
]},
"routing": {
"domainStrategy": "IPIfNonMatch",
"domainMatcher": "linear",
"rules": [
{
"type": "field",
"inboundTag": [
"api"
],
"outboundTag": "api",
"enabled": true
},
{
"type": "field",
"port": "0-65535",
"outboundTag": "proxy",
"enabled": true
}
]}
}
domain.com.log (Nginx 日志文件)
- 162.142.125.210 - - [19/Jul/2022:10:00:00 +0000] "GET / HTTP/1.1" 404 153 "-" "-"
162.142.125.210 - - [19/Jul/2022:10:00:00 +0000] "GET / HTTP/1.1" 404 153 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)"
172.70.210.164 - - [19/Jul/2022:10:00:06 +0000] "GET /v2ray HTTP/1.1" 502 157 "-" "Go-http-client/1.1"
172.70.210.164 - - [19/Jul/2022:10:00:06 +0000] "GET /v2ray HTTP/1.1" 502 157 "-" "Go-http-client/1.1"
172.69.33.240 - - [19/Jul/2022:10:00:06 +0000] "GET /v2ray HTTP/1.1" 502 157 "-" "Go-http-client/1.1"
V2Ray 服务端日志文件
2022/07/19 09:57:02 [Warning] v2ray.com/core: V2Ray 4.22.1 started
V2Ray 客户端日志文件
- // 在这里附上客户端日志
配置成功
[Vmess] V2Ray(v2ray***com:443)
启动服务(2022/7/19 18:35:25)...
V2Ray 4.42.2 (V2Fly, a community-driven edition of V2Ray.) Custom (go1.17.1 windows/386)
A unified platform for anti-**ship.
2022/07/19 18:35:25 [Info] main/jsonem: Reading config: D:\Software\v2rayN-Core\config.json
2022/07/19 18:35:25 [Warning] V2Ray 4.42.2 started
2022/07/19 18:35:25 127.0.0.1:61280 accepted //mtalk.google.com:5228 [proxy]2022/07/19 18:35:25 127.0.0.1:61281 accepted //bl3301.storage.live.com:443 [proxy]2022/07/19 18:35:26 127.0.0.1:61286 accepted tcp:127.0.0.1:0 [api]2022/07/19 18:35:30 127.0.0.1:61292 accepted //www.google.com:443 [proxy]2022/07/19 18:35:30 127.0.0.1:61294 accepted //alive.github.com:443 [proxy]2022/07/19 18:35:35 127.0.0.1:61308 accepted //alive.github.com:443 [proxy]2022/07/19 18:35:36 [Warning] [2092548641] app/proxyman/outbound: failed to process outbound traffic > proxy/vmess/outbound: failed to find an available destination > common/retry: [transport/internet/websocket: failed to dial WebSocket > transport/internet/websocket: failed to dial to (wss://domain.com/v2ray): 502 Bad Gateway > websocket: bad handshake] > common/retry: all retry attempts failed
2022/07/19 18:35:36 127.0.0.1:61311 accepted //mtalk.google.com:5228 [proxy]2022/07/19 18:35:39 [Warning] [2069622245] app/proxyman/outbound: failed to process outbound traffic > proxy/vmess/outbound: failed to find an available destination > common/retry: [transport/internet/websocket: failed to dial WebSocket > transport/internet/websocket: failed to dial to (wss://domain.com/v2ray): 502 Bad Gateway > websocket: bad handshake] > common/retry: all retry attempts failed
2022/07/19 18:35:39 127.0.0.1:61321 accepted //alive.github.com:443 [proxy]2022/07/19 18:35:40 [Warning] [2041129081] app/proxyman/outbound: failed to process outbound traffic > proxy/vmess/outbound: failed to find an available destination > common/retry: [transport/internet/websocket: failed to dial WebSocket > transport/internet/websocket: failed to dial to (wss://domain.com/v2ray): 502 Bad Gateway > websocket: bad handshake] > common/retry: all retry attempts failed
2022/07/19 18:35:40 127.0.0.1:61326 accepted //www.google.com:443 [proxy]
- "listen":"0.0.0.0"
,或者直接删掉这一行,感谢 @huaxing0211 的回复。
注意事项:如果在本机安装 v2ray,则
- "listen":"127.0.0.1"
。如果通过 docker 安装 v2ray,则
- "listen":"0.0.0.0"
。
rejectedv2ray.com/core/proxy/vmess/encoding: invalid user。
解决方案:
- "alterId": 0
改为
- "alterId": 64
,感谢 @time12sads 的回复。
注意事项:在最新版本的 v2ray 中,这一项参数发生了变化,alterId 个人不建议为 0。
推荐楼 摩卡 4天前
看下nginx的日志 有没有转发到v2容器
另外我看v2容器没有配置端口号 你配置下端口映射规则试试?
2楼 toot 4天前
用aapanrl面板吧。方便管理https://daima.eu.org/post/bt-v2ray/
4楼 汤家凤 4天前
别的不说,先校时,保证二者相差不超过90s
5楼 CC大魔王 4天前
domain.com 是本来就是这样写的,还是你打码了的
另外我看v2容器没有配置端口号 你配置下端口映射规则试试?
v2 容器用的是 1024 端口,通过 nginx 反向代理转发到 443 端口,443 端口映射为本机的 443 端口,这个已经配置了。
V2Ray 服务器配置文件
- ...
"inbounds": [
{
"port": 1024,
...
v2ray.conf (Nginx 配置文件)
- ...
# 假设WebSocket监听在环回地址的10000端口上
proxy_pass http://v2ray:1024;
...
docker-compose.yml (docker compose 配置文件)
- ...
# 端口
ports:
# 80 端口
- "80:80"
# 443 端口
- "443:443"
...
7楼 Jianrry 4天前
用aapanrl面板吧。方便管理https://daima.eu.org/post/bt-v2ray/
不习惯用面板,习惯用 docker 一把梭了。。。
8楼 Jianrry 4天前
别的不说,先校时,保证二者相差不超过90s
已经修改时区 和 校时 了,服务器时间和本机时间相差不到1min.
9楼 一颗赛艇 4天前
nginx 报错502 说明连接不到后端
再看你的docker compose文件,两个容器之间没有定义关联网络,两个容器网络是不通的
要么用link关联 要么定义一个网络两个容器加入
参考 https://docs.docker.com/compose/networking/
10楼 Jianrry 4天前
domain.com 是本来就是这样写的,还是你打码了的
打了码,将 我的域名修改为了 domain.com ,为了防止别人恶意攻击。
12楼 Jianrry 4天前
nginx 报错502 说明连接不到后端
再看你的docker compose文件,两个容器之间没有定义关联网络,两个容器网 ...
https://docs.docker.com/compose/networking/
For example, suppose your app is in a directory called myapp, and your docker-compose.yml looks like this:
version: "3.9"
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
ports:
- "8001:5432"
When you run docker-compose up, the following happens:A network called myapp_default is created.
A container is created using web’s configuration. It joins the network myapp_default under the name web.
A container is created using db’s configuration. It joins the network myapp_default under the name db.Each container can now look up the hostname web or db and get back the appropriate container’s IP address. For example, web’s application code could connect to the URL postgres://db:5432 and start using the Postgres database.
It is important to note the distinction between HOST_PORT and CONTAINER_PORT. In the above example, for db, the HOST_PORT is 8001 and the container port is 5432 (postgres default). Networked service-to-service communication uses the CONTAINER_PORT. When HOST_PORT is defined, the service is accessible outside the swarm as well.
Within the web container, your connection string to db would look like postgres://db:5432, and from the host machine, the connection string would look like postgres://{DOCKER_IP}:8001.
如上所示,在3.9版本的 docker compose 中,同一个 docker-compose.yml 中存在2个容器 web 和 db。
1. 会自动创建一个网络,自动命名为 web_db_default
2. 这2个容器会自动加入此默认的网络 web_db_default
3. web 可以通过 "db:8001" 直接访问 db 这个容器的 8001 端口。
当然用 link 直接指定一个网络,让2个容器加入也可以。
13楼 wjhhxl 4天前
你的域名没有申请成功ssl啊。
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /path/to/cert/file;
ssl_certificate_key /path/to/cert/file;
14楼 huaxing0211 4天前
"listen":"127.0.0.1",
docker里用0.0.0.0,或是删除,默认
VMessAEAD 协议已经经过同行评议并已经整合了相应的修改。 VMess MD5 认证信息 的淘汰机制已经启动。
自 2022 年 1 月 1 日起,服务器端将默认禁用对于 MD5 认证信息 的兼容。任何使用 MD5 认证信息的客户端将无法连接到禁用 VMess MD5 认证信息的服务器端。
在服务器端可以通过设置环境变量 v2ray.vmess.aead.forced = true 以关闭对于 MD5 认证信息的兼容。 或者 v2ray.vmess.aead.forced = false 以强制开启对于 MD5 认证信息 认证机制的兼容 (不受到 2022 年自动禁用机制的影响) 。 (v4.35.0+)
服务端:V2Ray 4.22.1
客户端:V2Ray 4.42.2
我的 alterId 应该设置为 0 吧
17楼 Jianrry 4天前
你的域名没有申请成功ssl啊。
server {
我的域名已经申请了证书,用的是 cloudflare 的15年证书,cloudflare 的 tls 设置为 full 模式。
/path/to/cert/file 的内容已经隐藏了,证书的文件名是我的域名,为了避免被人恶意攻击,所以隐藏了这个路径。
网上的回复说与时间有关,需要校对时间。
我已经尝试过了修改服务器的时区为上海时区,通过 ntpdate -u time.windows.com 校对时间,误差不超过1s ,本地电脑的时间也校对过了。
重新检查了一下 v2ray 的配置文件,但是还没有发现问题。
麻烦路过的各位大佬,多多指点一下。
19楼 huaxing0211 4天前
非常感谢大佬的回复,问题就是出在这里。
刚才按照大佬的回复,修改完配置文件之后。
uuid是一致的么?如空格?
date -R 看下时间和时区。
另外:
proxy_pass http://v2ray:1024;
docker默认网络最好不要用容器名来访问,要使用容器名来指代,最最好新建一个网络。(因重启什么的,可能会造成容器的ip改变,内部ip映射表没更新话,直接容器名访问就会有问题……)
20楼 Jianrry 4天前
docker配置要改成这样
谢谢你的回复,不是这个的问题,主要的问题是 V2Ray 容器没有监听到网卡。
用的是 V2Ray 的容器,应该 listen 0.0.0.0 而不是 127.0.0.1。
V2Ray 的 1024 端口已经转发到 Nginx 的 443 端口,不需要暴露 1024 端口了。
22楼 airsteam 4天前
看一下docker的日志
23楼 千牛 4天前
我记得vv自己有证书校验了,除非你要伪装,否则没必要再来一个nginx带一层走
24楼 huaxing0211 3天前
vmess协议换成vless试试。。。
25楼 yinguo520 3天前
进来看看。现在用的一键。
26楼 Jianrry 半小时前
看一下docker的日志
谢谢大佬的回复,问题已经解决了。
解决方案稍后见置顶的那一条回复,遇到同一个问题可以参考一下。
27楼 Jianrry 半小时前
我记得vv自己有证书校验了,除非你要伪装,否则没必要再来一个nginx带一层走 ...
我听说伪装的安全性更高,所以才采取了 vmess+ws+tls+nginx 的方案。
后来我发现采用这一套方案后,速度变得更慢了,我打算直接用 vmess+ws 算了。
28楼 huanx 半小时前
不习惯用面板,习惯用 docker 一把梭了。。。
这种应该怎么一把梭 出个教程
不太会用dokcercompose只会那个 docker run
29楼 Jianrry 半小时前
vmess协议换成vless试试。。。
谢谢大佬的回复,现在问题已经解决了,下次再试一下 vless 协议。
30楼 huanx 半小时前
我听说伪装的安全性更高,所以才采取了 vmess+ws+tls+nginx 的方案。
后来我发现采用这一套方案后,速度 ...
vmess ws 很简单 直接 docker run 就可以了..nginx 都不用..
32楼 Jianrry 半小时前
这种应该怎么一把梭 出个教程
不太会用dokcercompose只会那个 docker run...
你可以参考下面的这个项目,修改里面的 v2ray.conf(nginx配置文件) 和 config.json(v2ray配置文件) 以及 ssl 证书文件。
1. 安装 docker 和 docker compose,网上有一键脚本,可以自己搜索一下。
2. 将域名解析到服务器的 ip 上。
3. 上传已经修改后的项目到服务器。
4. 进入项目的目录下,执行 "sudo docker compose up -d",在后台启动全部的容器。
33楼 Jianrry 半小时前
vmess ws 很简单 直接 docker run 就可以了..nginx 都不用..
我以前的做法是 单个容器用 docker 多个容器用 docker compose,我现在的做法是都用 docker compose。
docker compose 的优势是方便管理容器,无论多少个容器,都可以共用一个配置文件(docker-compose.yml),可以将数据卷映射为同一个文件里面的子文件夹,可以使用一个命令停止、启动、删除从而进行管理。
我现在迁移容器,都是将 docker compose 文件夹上传到服务器,然后通过一行命令启动。
改为
- "listen":"0.0.0.0"
,或者直接删掉这一行,感谢 @huaxing0211 的回复。
注意事项:如果在本机安装 v2ray,则
- "listen":"127.0.0.1"
。如果通过 docker 安装 v2ray,则
- "listen":"0.0.0.0"
。
rejectedv2ray.com/core/proxy/vmess/encoding: invalid user。
解决方案:
- "alterId": 0
改为
- "alterId": 64
,感谢 @time12sads 的回复。
注意事项:在最新版本的 v2ray 中,这一项参数发生了变化,alterId 个人不建议为 0。
35楼 Jianrry 10分钟前
你更新了吗? 新版的v2ray 的配置中, alterId 的值必须得是 64
感谢你的回复,现在问题已经解决了。
我之前的回复是我弄错了,我没有认真看官方的文档就回复了。
在最新版本的 v2ray 中,这一项参数发生了变化,alterId 的值改为 64,最后问题就解决了。
申明:本文内容由网友收集分享,仅供学习参考使用。如文中内容侵犯到您的利益,请在文章下方留言,本站会第一时间进行处理。