Как стать автором
Обновить

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

Уровень сложностиСредний

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`. Наслаждаемся.


Ссылки:

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.