Задать вопрос
  • DOCKER + VLESS + NGINX. Как настроить сайт и VLESS на одном порту?

    @AlexeyP0708
    map $ssl_preread_server_name $sni_name {
        hostnames;
        exemple.com           www;
        *.exemple.com         www;
        default              xray;
    }
    
    upstream xray {
        server x-ray:8443;
    }
    upstream www {
        server 127.0.0.1:7443;
    }
    
    server {
        listen            443;
        proxy_pass        $sni_name;
        ssl_preread       on;
        proxy_protocol    on;
    }


    {
      "log": {
    # смотри файл error.log (tail -f 'error.log') - если есть попытки соединения, то надо настраивать конфиг XRAY,  если нету и лог не обновляется, 
    # то пакеты просто не приходят, нужно оценивать или соединение на уровне докер контейнеров или корректность работы # NGINX 
            "access":"${LOGS_PATH}/access.log",
            "error":"${LOGS_PATH}/error.log",
            "loglevel": "debug"
      },
      "routing": {
        "rules": [],
        "domainStrategy": "AsIs"
      },
      "inbounds": [
        {
    # Оставь 0.0.0.0 или "listen":"bridge"  Имя будет зависеть от того к какому мосту подключен XRAY контейнер
    # 127.0.0.1 - это локалхост контейнера.   В сети bridge его не увидит ни один контейнер.
        "listen": "0.0.0.0",
    # открой порт в контейнере и пробуй на прямую закоyнектиться, тогда сможешь отладить настройки XRAY.
          "port": 8443,
          "protocol": "vless",
          "tag": "vless_tls",
          "settings": {
            "clients": [
              {
                "id": "zzz",
                "email": "test@test.ru",
                "flow": "xtls-rprx-vision"
              }
            ],
            "decryption": "none"
          },
          "streamSettings": {
            "network": "tcp",
            "security": "reality",
            "realitySettings": {
              "show": false,
    # теперь вместо dest =>target  https://xtls.github.io/ru/config/transport.html#realityobject
    # сам из за этого много времени потратил
              "target": "www.google.com:443",
              "xver": 0,
              "serverNames": ["www.google.com"],
              "privateKey": "xxx",
              "minClientVer": "",
              "maxClientVer": "",
              "maxTimeDiff": 0,
    #shortIds должен быть четное количество символов - openssl rand -hex 8
              "shortIds": ["yyy"]
            }
          },
          "sniffing": {
            "enabled": true,
            "destOverride": ["http", "tls", "quic"]
          }
        }
      ],
      "outbounds": [
        {
          "protocol": "freedom",
          "tag": "direct"
        },
        {
          "protocol": "blackhole",
          "tag": "block"
        }
      ]

    Нужно понимать что маскировка XRAY-VLESS REALITY происходит или под реальный чужой домен (google.com, yahoo.com) или по свой фейковый сайт. на том же IP что и XRAY.
    если вместо google.com ,будешь прописывать свой домен фейкового сайта, то настройки XRAY будут другие.

    Те настройки которые прикладывал ранее, они для своего фейкового сайта который находится на том же хосте что и XRAY и имеют один IP. Если Фейковый сайт в другом контейнере, то "target":"{name_container}:{port}".
    Написано
  • DOCKER + VLESS + NGINX. Как настроить сайт и VLESS на одном порту?

    @AlexeyP0708
    Пример настроек NGINX для marzban
    Все настройки для хост сети.
    http {
    server {
                    listen 80;
                    server_name ${FAKE_DOMAIN};
                    return 301 https://$http_host$request_uri;
            }
            server {
                listen 127.0.0.1:10443 ssl;
                server_name ${FAKE_DOMAIN};
                ssl_certificate      ${SSL_DOMAIN_DIR}/fullchain_public.crt;
                ssl_certificate_key      ${SSL_DOMAIN_DIR}/private.key;
                add_header Strict-Transport-Security "max-age=63072000" always;
                error_page 403 /403.html;
                location = /403.html {
                    root    /usr/share/nginx/html;
                    allow all;
                }
                location / {
                    return 403;
                }
            }
            server {
                #listen 127.0.0.1:9443 ssl;
        #Только для дебага - чтобы иметь доступ к панели управления по порту.
                listen 9443 ssl;
                server_name ${PANEL_DOMAIN};
                ssl_certificate      ${SSL_PANEL_DOMAIN_DIR}/fullchain_public.crt;
                ssl_certificate_key      ${SSL_PANEL_DOMAIN_DIR}/private.key;
                add_header Strict-Transport-Security "max-age=63072000" always;
                
                root /usr/share/nginx/www;
                index index.html index.htm;
                proxy_connect_timeout       300;
                proxy_send_timeout          300;
                proxy_read_timeout          300;
                send_timeout                300;
    
                #auth_basic "Restricted";
                #auth_basic_user_file /etc/nginx/.htpasswd;
           
                location / {
                        return 503;
                }
    
                location /dashboard/ {
                        proxy_set_header Host $host;
                        proxy_pass http://127.0.0.1:8000/dashboard/;
                }
    
                location /api/ {
                        proxy_set_header Host $host;
                        proxy_pass http://127.0.0.1:8000/api/;
                        proxy_http_version 1.1;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection "upgrade";
                }
    
                location /statics/ {
                        proxy_set_header Host $host;
                        proxy_pass http://127.0.0.1:8000/statics/;
                }
    
                location /sub/ {
                        proxy_set_header Host $host;
                        proxy_pass http://127.0.0.1:8000/sub/;
                }
    }
    stream {
            map $ssl_preread_server_name $sni_name {
                hostnames;
                ${PANEL_DOMAIN} panel;
                default xray;
            }
            upstream xray {
                server 127.0.0.1:8443;
            }
            upstream panel {
                server 127.0.0.1:9443;
            }
    # for debugging
    #log_format stream_routing '$remote_addr [$time_local] '
    #                          'with SNI name "$ssl_preread_server_name" '
    #                          'proxying to "$sni_name" '
    #                          '$protocol $status $bytes_sent $bytes_received '
    #                         '$session_time';
            server {
                listen       443;
                 listen [::]:443;
                proxy_pass      $sni_name;
                ssl_preread     on;
                #access_log /var/log/nginx/stream_443.log stream_routing;
            }
    }


    xray vless-reality config

    "log": {
            "access":"/var/lib/marzban/logs/access.log",
            "error":"/var/lib/marzban/logs/error.log",
            "loglevel": "debug"
     },
    "inbounds": [
            {
                "tag": "VLESS_TCP_REALITY",
     # для дебага.  Проверить сначала успешное соединение на 8443 (на прямую), а уже потом через 443 (через nginx)
    # "listen": "0.0.0.0", 
                "listen": "127.0.0.1",
                "port": 8443,
                "protocol": "vless",
                "settings": {
                    "clients": [],
                    "decryption": "none"
                },
                "streamSettings": {
                    "network": "tcp",
                    "tcpSettings": {},
                    "security": "reality",
                    "realitySettings": {
                        "show": true,
                        "serverName": "${FAKE_DOMAIN}",
                        "target": "10433",
                        "xver": 0,
                        "serverNames": [
                            ${FAKE_SNI_DOMAINS}
                        ],
                        "privateKey": "${PRIVATE_KEY}",
                        "shortIds": [
                            "${SHORT_IDS}"
                        ]
                    }
                },
                "sniffing": {
                    "enabled": true,
                    "destOverride": [
                        "http",
                        "tls",
                        "quic"
                    ]
                }
            }
        ]


    Пакет VPN проходит следующим образом.
    nginx->stream->xray(8443)->auth->proxing or blocking.
    Пакет при посещении фейкового сайта.
    nginx->stream->xray(to 8443)->fallback(target: 10443)->ngnix.http(10443)->return page;
    Адресацию на фейк страницу через NGINX не получится, так как SNI фейковой страницы и SNI VPN одинаковы, и тогда VPN соединение в nginx.stream будет перенаправляться на фейковую страницу .
    Пакет при посещении панели управления
    nginx->stream->panel( to 9443)->nginx.http(9443)->return page;

    На клиенте порт должен изменен на 443.
    Написано
  • DOCKER + VLESS + NGINX. Как настроить сайт и VLESS на одном порту?

    @AlexeyP0708
    1. сетевые настройки контейнеров привязаны к сети по умолчанию bridge. В таком случае каждый контейнер имеет свой IP данной сети. Поэтому доступа к ним через 127.0.0.1:{port} не будет. Как указал Valentin Barbolin к ним нужен прописывать имя контейнера. Попробуй лучше тогда перевести все контейнеры в сетевой режим хоста (привязать все контейнеры к хосту). тогда контейнеры смогут ходить только по портам (127.0.0.1:{port})
    2. Надо проверить, определяются ли маршруты nginx по SNI. Поэтому прежде чем маршрутизировать трафик на xray, попробуй создать сначала страницу заглушку на 9000 порту, и направлять трафик по умолчанию туда. => upstream xray {
    127.0.0.1:9000;
    }
    Проверить работают ли маршруты с контейнерами (если все контейнеры реализуют хостовую сеть) на хост машине:
    curl 127.0.0.1:443
    curl -k https://${fake_domain}:443
    3. Вы не указали конфиги Xray. Для VLESS reality, в конфиге inbounds.listen=127.0.0.1 (если все контейнеры реализуют хостовую сеть) или reality inbounds.listen=0.0.0.0 (если bridge). reality inbounds.port=9001
    4. Проверять настройки клиента. Там должен быть указан порт 433 вместо 9001
    5. cerbot в отдельном контейнере? Ну тогда надо думать как перезапускать сервисы после автоматического обновления сертификатов.
    6. Кажись XRAY не будет принимать трафик от NGINX, ибо NGINX что то там колдует. Сам застрял на этом.
    Написано
  • 3X-UI конфиг - изменение адреса прослушивания панели, в чём ошибка?

    @AlexeyP0708
    Пофиг на сроки!
    мда! ни статьи не инструкций.
    Если поменяли настройкe в Web панели - "Домен прослушивания панели По умолчанию оставьте пустым, чтобы отслеживать все домены и IP-адреса" на 127.0.0.1 -это значит Панель будет принимать запросы только с локахоста, т.е. с внутренней машины.
    Теоретически есть два варианта решения проблемы.
    Хардкорный - Проброс портов через iptables :
    iptables -t nat -A PREROUTING -i ${INET_INTERFACE} -p tcp --dport ${port} -j DNAT --to-destination 127.0.0.1
    iptables -t nat -A POSTROUTING -p tcp --dport ${port} -o lo -j SNAT --to-source ${INET_IP}
    iptables-save > /etc/iptables-conf/iptables_rules.ipv4
    iptables-restore < /etc/iptables-conf/iptables_rules.ipv4
    sysctl -w net.ipv4.conf.${INET_INTERFACE}.route_localnet=1

    НУ или пользоваться `sqlite3 "/etc/x-ui/x-ui.db" "select * from settings;"`
    Вычислять как называется настройка и удалять
    sqlite3 "/etc/x-ui/x-ui.db" "DELETE FROM settings WHERE key=${name_settings};"
    x-ui restart;

    Ясень пень - все через SSH или Терминал хостера в личном кабинете.
    Написано