Pull to refresh

Xray-client в терминале Linux

Level of difficultyMedium

Xray — это инструмент, который представляет собой высокоэффективный прокси-сервер с множеством возможностей, включая использование различных протоколов, таких как VLESS и VMess, для обхода блокировок.

Все мы умеем настраивать клиента через GUI Nekobox или прочие приложения, но недавно мне понадобилось поставить клиента на домашнем Ubuntu-сервере, где доступен только терминал. А понадобилось мне оное, чтобы использовать xray как прокси (например, пустить через неё ютуб на телевизоре).

Установка Xray

Понадобится ваш личный конфиг подключения. Взять его можно, например, из Nekobox:

Экспорт конфигурации клиента из Nekobox
Экспорт конфигурации клиента из Nekobox

Итак, заходим на сервер и скачиваем репозиторий XTLS/Xray-install:

bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

Оттуда же обновляем geoip.dat и geosite.dat:

bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install-geodata

Далее мы должны скачать customgeo.dat и переместить на сервер в директорию /usr/local/share/xray.

Создание конфигурации

Опишем конфигурацию по моему примеру:

config.json
{
  "dns": {
    "disableFallback": true,
    "servers": [
      {
        "address": "https://8.8.8.8/dns-query",
        "domains": [
          "domain:youtube.com",
          "domain:chat.openai.com",
          "domain:openai.com",
          "domain:googlevideo.com",
          "domain:ytimg.com",
          "domain:youtu.be",
          "domain:ggpht.com",
          "domain:youtubei.googleapis.com",
          "domain:yt4.ggpht.com",
          "domain:ytimg.l.google.com",
          "domain:nhacmp3youtube.com",
          "domain:googleusercontent.com",
          "domain:googleapis.com",
          "domain:gstatic.com"
        ],
        "queryStrategy": ""
      }
    ],
    "tag": "dns"
  },
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "port": 2080,
      "protocol": "socks",
      "settings": {
        "udp": true
      },
      "sniffing": {
        "destOverride": [
          "http",
          "tls",
          "quic"
        ],
        "enabled": true
      },
      "tag": "socks-in"
    },
    {
      "listen": "0.0.0.0",
      "port": 2081,
      "protocol": "http",
      "sniffing": {
        "destOverride": [
          "http",
          "tls",
          "quic"
        ],
        "enabled": true
      },
      "tag": "http-in"
    }
  ],
  "log": {
    "loglevel": "warning"
  },
  "outbounds": [
    {
      "domainStrategy": "AsIs",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "<ip-server>",
            "port": 443,
            "users": [
              {
                "encryption": "none",
                "flow": "xtls-rprx-vision",
                "id": "<your-id-server>"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "realitySettings": {
          "fingerprint": "chrome",
          "publicKey": "<your-publicKey-server>",
          "serverName": "www.google.com",
          "shortId": "<your-shortId-server>"
        },
        "security": "reality"
      },
      "tag": "proxy"
    },
    {
      "protocol": "freedom",
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "tag": "block"
    }
  ],
  "policy": {
    "levels": {
      "1": {
        "connIdle": 30
      }
    },
    "system": {
      "statsOutboundDownlink": true,
      "statsOutboundUplink": true
    }
  },
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "domain": [
          "domain:youtube.com",
          "domain:chat.openai.com",
          "domain:openai.com",
          "domain:googlevideo.com",
          "domain:ytimg.com",
          "domain:youtu.be",
          "domain:ggpht.com",
          "domain:youtubei.googleapis.com",
          "domain:yt4.ggpht.com",
          "domain:ytimg.l.google.com",
          "domain:nhacmp3youtube.com",
          "domain:googleusercontent.com",
          "domain:googleapis.com",
          "domain:gstatic.com"
        ],
        "outboundTag": "proxy",
        "type": "field"
      },
      {
        "outboundTag": "direct",
        "type": "field",
        "domain": [
          "geosite:category-ads-all",
          "geosite:category-porn"
        ]
      }
    ]
  },
  "stats": {}
}

Подставить ВАШИ данные.

Скопируем конфиг в рабочую область:

sudo cp config.json /usr/local/etc/xray/config.json

Наконец, запускаем сервис

sudo systemctl start xray

Смотрим, чтобы не было ошибок. При наличии - ищем их в файле конфигурации.

sudo systemctl status xray

Ну и если всё заработало, создадим сервис:

sudo systemctl enable xray

Запуск и использование прокси

Для HTTP соединений используем порт 2081, для SOCKS 2080. В конфиге, естественно, можно поменять порты на любые.

export http_proxy=http://127.0.0.1:2081
export https_proxy=http://127.0.0.1:2081
export ftp_proxy=http://127.0.0.1:2081
export socks_proxy=http://127.0.0.1:2080

Если включён ufw на сервере, откроем порты:

sudo ufw allow 2080/tcp
sudo ufw allow 2081/tcp
sudo iptables -A INPUT -p tcp --dport 2080 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2081 -j ACCEPT

Использование SOCKS прокси:

export SOCKS_PROXY="socks5://<IP-adress>:2080"

HTTP прокси:

export http_proxy="http://<IP-adress>:2081"

Данное прокси можно использовать где угодно в локальной сети. Я лишь покажу как пустить через него ютуб на тв.

Скачиваем SmartTube на Android TV. В общих настройках ищем "Цензура". И здесь прописываем адрес вашего прокси. Адрес сервера можно найти в настройках роутера или в терминале командой `ip addr`. Наслаждаемся.


Ссылки:

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.