Как настроить VLESS с Reality и веб-сайт на одном IP-адресе, используя Traefik?

Вот улучшенная формулировка вашего вопроса для ясности и структуры:

У меня есть VPS от Amazon, на котором в настоящее время запускается сайт (хотя сейчас он не работает, но в ближайшее время снова будет). Мне поручили настроить VPN вместо утраченного WireGuard. Я выбрал VLESS с Reality через интерфейс 3X-UI, поскольку он позволяет работать в контейнере и не занимает порт 443. На сервере уже установлен Traefik, так как там также работает почтовый сервер. 

Вот конфигурация 3X-UI, созданная в процессе: 

```yaml
---
version: '3'

networks:
  default:
    name: net-traefik
    external: true
    
services:
  3x-ui:
    image: ghcr.io/mhsanaei/3x-ui:latest
    container_name: 3x-ui
    hostname: ############
    volumes:
      - $PWD/db/:/etc/x-ui/
      - $PWD/cert/:/root/cert/
    environment:
      XRAY_VMESS_AEAD_FORCED: "false"
    tty: true
    network_mode: bridge #host
    ports:
      - "5107:5107" #порт панели управления
      - "222:222" #порт для Shadowsocks
      - "443" #порт для VLESS
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      # TCP маршрут для VLESS-протокола
      - "traefik.tcp.routers.vless.rule=HostSNI(`discord.com`)"
      - "traefik.tcp.routers.vless.tls.passthrough=true"
      - "traefik.tcp.routers.vless.service=3x-ui-reality"
      - "traefik.tcp.services.3x-ui-reality.loadbalancer.server.port=443"
```

Сервис я запустил в режиме бриджа, так как в противном случае он сообщал об ошибке на уже занятый порт 443 от Traefik. Мне не удалось прокинуть порт 443 для VLESS, хотя я пробовал это сделать (об этом расскажу ниже). Порт 5107 используется для веб-панели, а 222 — для Shadowsocks. Shadowsocks запускается без проблем, однако VLESS упорно отказывается работать. Порты открыты, tcpdump на сервере показывает пакеты, но...
  • 10 сентября 2024 г. 15:03
Ответы на вопрос 3
Настройка VLESS с Reality и веб-сайтом на одном IP-адресе с использованием Traefik может быть немного сложной, особенно если Traefik уже используется для других сервисов. Давайте рассмотрим, как правильно настроить вашу конфигурацию.

### Общий подход

1. **Проверка конфигурации Traefik**: Убедитесь, что Traefik правильно конфигурирован для работы с TCP и у вас есть необходимый профиль для обработки VLESS. Вы должны использовать TCP маршрутизацию для VLESS через `HostSNI`.

2. **Настройка контейнера 3X-UI**: Убедитесь, что VLESS и 3X-UI настроены правильно и что порты правильно проксируются через Traefik.

### Пример конфигурации Traefik

Убедитесь, что ваш Traefik настроен правильно для обработки TCP соединений. Вот обновленный пример, который вы можете адаптировать под свои нужды:

```yaml
# traefik.yaml
entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"
  vless:
    address: ":443"

providers:
  file:
    filename: "/path/to/your/rules.yml" # путь к файлу с маршрутами

certificatesResolvers:
  letsencrypt:
    acme:
      email: [email protected]
      storage: "/letsencrypt/acme.json"
      httpChallenge:
        entryPoint: web

http:
  routers:
    mywebsite:
      rule: "Host(`example.com`)"
      service: mywebsite-service
      entryPoints:
        - websecure
      tls:
        certResolver: letsencrypt

tcp:
  routers:
    vless:
      rule: "HostSNI(`your-vless-domain.com`)"
      service: vless-service
      tls:
        passthrough: true
      entryPoints:
        - vless

services:
  mywebsite-service:
    loadBalancer:
      servers:
        - url: "http://your-website:port"

  vless-service:
    loadBalancer:
      servers:
        - url: "tcp://3x-ui:443"
```

### Обновленная конфигурация 3X-UI

В вашей конфигурации 3X-UI убедитесь, что вы используете правильные настройки:

```yaml
version: '3'

networks:
  default:
    name: net-traefik
    external: true
    
services:
  3x-ui:
    image: ghcr.io/mhsanaei/3x-ui:latest
    container_name: 3x-ui
    volumes:
      - $PWD/db/:/etc/x-ui/
      - $PWD/cert/:/root/cert/
    environment:
      XRAY_VMESS_AEAD_FORCED: "false"
    network_mode: "bridge"
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      - "traefik.tcp.routers.vless.rule=HostSNI(`your-vless-domain.com`)"
      - "traefik.tcp.routers.vless.service=vless-service"
      - "traefik.tcp.services.vless-service.loadbalancer.server.port=443"
```

### Примечания

1. **DNS запись**: Убедитесь, что DNS-запись для `your-vless-domain.com` указывает на ваш VPS.

2. **TCP порты**: Поскольку VLESS работает через TCP, убедитесь, что указанный порт 443 доступен и не блокируется вашим фаерволом.

3. **Отключение тестирования**: Если после настройки VLESS все еще не работает, рекомендуется временно отключить Traefik и протестировать 3X-UI напрямую, чтобы убедиться, что он настроен правильно.

4. **Логи**: Просмотрите логи как Traefik, так и 3X-UI, чтобы выявить и устранить возможные ошибки.

Пробуйте следовать этой общему подходу, и вы сможете настроить вашу конфигурацию. Если будут какие-либо дополнительные вопросы в процессе, не стесняйтесь задавать!
Вы поиск не пробовали использовать? Вчера здесь был вопрос.
VLESS+Reality требует единоличный доступ к 443му порту. всё, точка. 
Либо освобождайте порт, либо меняйте порт для vless, хоть это и ставит под сомнение его "скрытность"

есть в сети примеры для совмещения его с nginx, но помойму там всё такое себе...

На VPS амазона то не разоритесь, на трафике?
Похожие вопросы