mirror of
https://github.com/telemt/telemt.git
synced 2026-04-14 17:14:09 +03:00
docs: align LTO notes, API docs, and Fake-TLS guidance
This commit is contained in:
@@ -26,6 +26,7 @@
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
## Features
|
||||||
Our implementation of **TLS-fronting** is one of the most deeply debugged, focused, advanced and *almost* **"behaviorally consistent to real"**: we are confident we have it right - [see evidence on our validation and traces](docs/FAQ.en.md#recognizability-for-dpi-and-crawler)
|
Our implementation of **TLS-fronting** is one of the most deeply debugged, focused, advanced and *almost* **"behaviorally consistent to real"**: we are confident we have it right - [see evidence on our validation and traces](docs/FAQ.en.md#recognizability-for-dpi-and-crawler)
|
||||||
|
|
||||||
Our ***Middle-End Pool*** is fastest by design in standard scenarios, compared to other implementations of connecting to the Middle-End Proxy: non dramatically, but usual
|
Our ***Middle-End Pool*** is fastest by design in standard scenarios, compared to other implementations of connecting to the Middle-End Proxy: non dramatically, but usual
|
||||||
@@ -59,7 +60,6 @@ See more in the [Quick Start Guide](docs/Quick_start/QUICK_START_GUIDE.en.md).
|
|||||||
- [Quick Start Guide EN](docs/Quick_start/QUICK_START_GUIDE.en.md)
|
- [Quick Start Guide EN](docs/Quick_start/QUICK_START_GUIDE.en.md)
|
||||||
|
|
||||||
## FAQ
|
## FAQ
|
||||||
|
|
||||||
- [FAQ RU](docs/FAQ.ru.md)
|
- [FAQ RU](docs/FAQ.ru.md)
|
||||||
- [FAQ EN](docs/FAQ.en.md)
|
- [FAQ EN](docs/FAQ.en.md)
|
||||||
|
|
||||||
@@ -72,9 +72,8 @@ cd telemt
|
|||||||
# Starting Release Build
|
# Starting Release Build
|
||||||
cargo build --release
|
cargo build --release
|
||||||
|
|
||||||
# Low-RAM devices (1 GB, e.g. NanoPi Neo3 / Raspberry Pi Zero 2):
|
# Current release profile uses lto = "fat" for maximum optimization (see Cargo.toml).
|
||||||
# release profile uses lto = "thin" to reduce peak linker memory.
|
# On low-RAM systems (~1 GB) you can override it to "thin".
|
||||||
# If your custom toolchain overrides profiles, avoid enabling fat LTO.
|
|
||||||
|
|
||||||
# Move to /bin
|
# Move to /bin
|
||||||
mv ./target/release/telemt /bin
|
mv ./target/release/telemt /bin
|
||||||
|
|||||||
26
README.ru.md
26
README.ru.md
@@ -4,9 +4,12 @@
|
|||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
>
|
>
|
||||||
> Исправленный TLS ClientHello доступен в **Telegram Desktop** начиная с версии **6.7.2**: для работы с EE-MTProxy обновите клиент.
|
> Исправленный TLS ClientHello доступен:
|
||||||
|
> - в **Telegram Desktop** начиная с версии **6.7.2**
|
||||||
|
> - в **Telegram Android** начиная с версии **12.6.4**
|
||||||
|
> - **официальный релиз для iOS находится в процессе разработки**.
|
||||||
>
|
>
|
||||||
> Исправленный TLS ClientHello доступен в **Telegram Android** начиная с версии **12.6.4**; **официальный релиз для iOS находится в процессе разработки**.
|
> Для работы с EE-MTProxy обновите клиент!
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://t.me/telemtrs">
|
<a href="https://t.me/telemtrs">
|
||||||
@@ -15,7 +18,6 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
**Telemt** — это быстрый, безопасный и функциональный сервер, написанный на Rust. Он полностью реализует официальный алгоритм прокси Telegram и добавляет множество улучшений для продакшена:
|
**Telemt** — это быстрый, безопасный и функциональный сервер, написанный на Rust. Он полностью реализует официальный алгоритм прокси Telegram и добавляет множество улучшений для продакшена:
|
||||||
|
|
||||||
- [ME Pool + Reader/Writer + Registry + Refill + Adaptive Floor + Trio-State + жизненный цикл генераций](https://github.com/telemt/telemt/blob/main/docs/Architecture/Model/MODEL.en.md);
|
- [ME Pool + Reader/Writer + Registry + Refill + Adaptive Floor + Trio-State + жизненный цикл генераций](https://github.com/telemt/telemt/blob/main/docs/Architecture/Model/MODEL.en.md);
|
||||||
- [Полноценный API с управлением](https://github.com/telemt/telemt/blob/main/docs/Architecture/API/API.md);
|
- [Полноценный API с управлением](https://github.com/telemt/telemt/blob/main/docs/Architecture/API/API.md);
|
||||||
- Защита от повторных атак (Anti-Replay on Sliding Window);
|
- Защита от повторных атак (Anti-Replay on Sliding Window);
|
||||||
@@ -25,7 +27,6 @@
|
|||||||

|

|
||||||
|
|
||||||
## Особенности
|
## Особенности
|
||||||
|
|
||||||
Реализация **TLS-fronting** максимально приближена к поведению реального HTTPS-трафика (подробнее - [FAQ](docs/FAQ.ru.md#распознаваемость-для-dpi-и-сканеров)).
|
Реализация **TLS-fronting** максимально приближена к поведению реального HTTPS-трафика (подробнее - [FAQ](docs/FAQ.ru.md#распознаваемость-для-dpi-и-сканеров)).
|
||||||
|
|
||||||
***Middle-End Pool*** оптимизирован для высокой производительности.
|
***Middle-End Pool*** оптимизирован для высокой производительности.
|
||||||
@@ -63,12 +64,10 @@ curl -fsSL https://raw.githubusercontent.com/telemt/telemt/main/install.sh | sh
|
|||||||
- [Quick Start Guide EN](docs/Quick_start/QUICK_START_GUIDE.en.md)
|
- [Quick Start Guide EN](docs/Quick_start/QUICK_START_GUIDE.en.md)
|
||||||
|
|
||||||
## FAQ
|
## FAQ
|
||||||
|
|
||||||
- [FAQ RU](docs/FAQ.ru.md)
|
- [FAQ RU](docs/FAQ.ru.md)
|
||||||
- [FAQ EN](docs/FAQ.en.md)
|
- [FAQ EN](docs/FAQ.en.md)
|
||||||
|
|
||||||
## Сборка
|
## Сборка
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Клонируйте репозиторий
|
# Клонируйте репозиторий
|
||||||
git clone https://github.com/telemt/telemt
|
git clone https://github.com/telemt/telemt
|
||||||
@@ -77,9 +76,8 @@ cd telemt
|
|||||||
# Начните процесс сборки
|
# Начните процесс сборки
|
||||||
cargo build --release
|
cargo build --release
|
||||||
|
|
||||||
# Устройства с небольшим объёмом оперативной памяти (1 ГБ, например NanoPi Neo3 / Raspberry Pi Zero 2):
|
# В текущем release-профиле используется lto = "fat" для максимальной оптимизации (см. Cargo.toml).
|
||||||
# используется параметр lto = «thin» для уменьшения пикового потребления памяти.
|
# На системах с малым объёмом RAM (~1 ГБ) можно переопределить это значение на "thin".
|
||||||
# Если ваш пользовательский набор инструментов переопределяет профили, не используйте Fat LTO.
|
|
||||||
|
|
||||||
# Перейдите в каталог /bin
|
# Перейдите в каталог /bin
|
||||||
mv ./target/release/telemt /bin
|
mv ./target/release/telemt /bin
|
||||||
@@ -89,22 +87,14 @@ chmod +x /bin/telemt
|
|||||||
telemt config.toml
|
telemt config.toml
|
||||||
```
|
```
|
||||||
|
|
||||||
### Устройства с малым объемом RAM
|
### OpenBSD
|
||||||
Для устройств с ~1 ГБ RAM (например Raspberry Pi):
|
|
||||||
- используется облегчённая оптимизация линковщика (thin LTO);
|
|
||||||
- не рекомендуется включать fat LTO.
|
|
||||||
|
|
||||||
## OpenBSD
|
|
||||||
|
|
||||||
- Руководство по сборке и настройке на английском языке [OpenBSD Guide (EN)](docs/Quick_start/OPENBSD_QUICK_START_GUIDE.en.md);
|
- Руководство по сборке и настройке на английском языке [OpenBSD Guide (EN)](docs/Quick_start/OPENBSD_QUICK_START_GUIDE.en.md);
|
||||||
- Пример rc.d скрипта: [contrib/openbsd/telemt.rcd](contrib/openbsd/telemt.rcd);
|
- Пример rc.d скрипта: [contrib/openbsd/telemt.rcd](contrib/openbsd/telemt.rcd);
|
||||||
- Поддержка sandbox с `pledge(2)` и `unveil(2)` пока не реализована.
|
- Поддержка sandbox с `pledge(2)` и `unveil(2)` пока не реализована.
|
||||||
|
|
||||||
## Почему Rust?
|
## Почему Rust?
|
||||||
|
|
||||||
- Надёжность для долгоживущих процессов;
|
- Надёжность для долгоживущих процессов;
|
||||||
- Детерминированное управление ресурсами (RAII);
|
- Детерминированное управление ресурсами (RAII);
|
||||||
- Отсутствие сборщика мусора;
|
- Отсутствие сборщика мусора;
|
||||||
- Безопасность памяти;
|
- Безопасность памяти;
|
||||||
- Асинхронная архитектура Tokio.
|
- Асинхронная архитектура Tokio.
|
||||||
|
|
||||||
|
|||||||
13
config.toml
13
config.toml
@@ -32,13 +32,13 @@ show = "*"
|
|||||||
port = 443
|
port = 443
|
||||||
# proxy_protocol = false # Enable if behind HAProxy/nginx with PROXY protocol
|
# proxy_protocol = false # Enable if behind HAProxy/nginx with PROXY protocol
|
||||||
# metrics_port = 9090
|
# metrics_port = 9090
|
||||||
# metrics_listen = "0.0.0.0:9090" # Listen address for metrics (overrides metrics_port)
|
# metrics_listen = "127.0.0.1:9090" # Listen address for metrics (overrides metrics_port)
|
||||||
# metrics_whitelist = ["127.0.0.1", "::1", "0.0.0.0/0"]
|
# metrics_whitelist = ["127.0.0.1/32", "::1/128"]
|
||||||
|
|
||||||
[server.api]
|
[server.api]
|
||||||
enabled = true
|
enabled = true
|
||||||
listen = "0.0.0.0:9091"
|
listen = "127.0.0.1:9091"
|
||||||
whitelist = ["127.0.0.0/8"]
|
whitelist = ["127.0.0.1/32", "::1/128"]
|
||||||
minimal_runtime_enabled = false
|
minimal_runtime_enabled = false
|
||||||
minimal_runtime_cache_ttl_ms = 1000
|
minimal_runtime_cache_ttl_ms = 1000
|
||||||
|
|
||||||
@@ -48,9 +48,12 @@ ip = "0.0.0.0"
|
|||||||
|
|
||||||
# === Anti-Censorship & Masking ===
|
# === Anti-Censorship & Masking ===
|
||||||
[censorship]
|
[censorship]
|
||||||
|
# Fake-TLS / SNI masking domain used in generated ee-links.
|
||||||
|
# Changing tls_domain invalidates previously generated TLS links.
|
||||||
tls_domain = "petrovich.ru"
|
tls_domain = "petrovich.ru"
|
||||||
|
|
||||||
mask = true
|
mask = true
|
||||||
tls_emulation = true # Fetch real cert lengths and emulate TLS records
|
tls_emulation = true # Fetch real cert lengths and emulate TLS records
|
||||||
tls_front_dir = "tlsfront" # Cache directory for TLS emulation
|
tls_front_dir = "tlsfront" # Cache directory for TLS emulation
|
||||||
|
|
||||||
[access.users]
|
[access.users]
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ API runtime is configured in `[server.api]`.
|
|||||||
|
|
||||||
| Field | Type | Default | Description |
|
| Field | Type | Default | Description |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| `enabled` | `bool` | `false` | Enables REST API listener. |
|
| `enabled` | `bool` | `true` | Enables REST API listener. |
|
||||||
| `listen` | `string` (`IP:PORT`) | `127.0.0.1:9091` | API bind address. |
|
| `listen` | `string` (`IP:PORT`) | `0.0.0.0:9091` | API bind address. |
|
||||||
| `whitelist` | `CIDR[]` | `127.0.0.1/32, ::1/128` | Source IP allowlist. Empty list means allow all. |
|
| `whitelist` | `CIDR[]` | `127.0.0.0/8` | Source IP allowlist. Empty list means allow all. |
|
||||||
| `auth_header` | `string` | `""` | Exact value for `Authorization` header. Empty disables header auth. |
|
| `auth_header` | `string` | `""` | Exact value for `Authorization` header. Empty disables header auth. |
|
||||||
| `request_body_limit_bytes` | `usize` | `65536` | Maximum request body size. Must be `> 0`. |
|
| `request_body_limit_bytes` | `usize` | `65536` | Maximum request body size. Must be `> 0`. |
|
||||||
| `minimal_runtime_enabled` | `bool` | `false` | Enables runtime snapshot endpoints requiring ME pool read-lock aggregation. |
|
| `minimal_runtime_enabled` | `bool` | `true` | Enables runtime snapshot endpoints requiring ME pool read-lock aggregation. |
|
||||||
| `minimal_runtime_cache_ttl_ms` | `u64` | `1000` | Cache TTL for minimal snapshots. `0` disables cache; valid range is `[0, 60000]`. |
|
| `minimal_runtime_cache_ttl_ms` | `u64` | `1000` | Cache TTL for minimal snapshots. `0` disables cache; valid range is `[0, 60000]`. |
|
||||||
| `runtime_edge_enabled` | `bool` | `false` | Enables runtime edge endpoints with cached aggregation payloads. |
|
| `runtime_edge_enabled` | `bool` | `false` | Enables runtime edge endpoints with cached aggregation payloads. |
|
||||||
| `runtime_edge_cache_ttl_ms` | `u64` | `1000` | Cache TTL for runtime edge summary payloads. `0` disables cache. |
|
| `runtime_edge_cache_ttl_ms` | `u64` | `1000` | Cache TTL for runtime edge summary payloads. `0` disables cache. |
|
||||||
|
|||||||
@@ -1942,7 +1942,8 @@ This document lists all configuration keys accepted by `config.toml`.
|
|||||||
<a id="cfg-server-proxy_protocol_trusted_cidrs"></a>
|
<a id="cfg-server-proxy_protocol_trusted_cidrs"></a>
|
||||||
- `proxy_protocol_trusted_cidrs`
|
- `proxy_protocol_trusted_cidrs`
|
||||||
- **Constraints / validation**: `IpNetwork[]`.
|
- **Constraints / validation**: `IpNetwork[]`.
|
||||||
- If omitted, defaults to trust-all CIDRs (`0.0.0.0/0` and `::/0`).
|
- If omitted, defaults to trust-all CIDRs (`0.0.0.0/0` and `::/0`).
|
||||||
|
> In production behind HAProxy/nginx, prefer setting explicit trusted CIDRs instead of relying on this fallback.
|
||||||
- If explicitly set to an empty array, all PROXY headers are rejected.
|
- If explicitly set to an empty array, all PROXY headers are rejected.
|
||||||
- **Description**: Trusted source CIDRs allowed to provide PROXY protocol headers (security control).
|
- **Description**: Trusted source CIDRs allowed to provide PROXY protocol headers (security control).
|
||||||
- **Example**:
|
- **Example**:
|
||||||
@@ -2474,7 +2475,8 @@ Note: This section also accepts the legacy alias `[server.admin_api]` (same sche
|
|||||||
<a id="cfg-censorship-tls_domain"></a>
|
<a id="cfg-censorship-tls_domain"></a>
|
||||||
- `tls_domain`
|
- `tls_domain`
|
||||||
- **Constraints / validation**: Must be a non-empty domain name. Must not contain spaces or `/`.
|
- **Constraints / validation**: Must be a non-empty domain name. Must not contain spaces or `/`.
|
||||||
- **Description**: Primary TLS domain used in FakeTLS handshake profile and as the default SNI domain.
|
- **Description**: Primary domain used for Fake-TLS masking / fronting profile and as the default SNI domain presented to clients.
|
||||||
|
This value becomes part of generated `ee` links, and changing it invalidates previously generated links.
|
||||||
- **Example**:
|
- **Example**:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
|
|||||||
@@ -27,7 +27,8 @@ cargo build --release
|
|||||||
./target/release/telemt --version
|
./target/release/telemt --version
|
||||||
```
|
```
|
||||||
|
|
||||||
For low-RAM systems, this repository already uses `lto = "thin"` in release profile.
|
For low-RAM systems, note that this repository currently uses `lto = "fat"` in release profile.
|
||||||
|
On constrained builders, a local override to `lto = "thin"` may be more practical.
|
||||||
|
|
||||||
## 3. Install binary and config
|
## 3. Install binary and config
|
||||||
|
|
||||||
|
|||||||
@@ -110,15 +110,15 @@ show = "*"
|
|||||||
# === Server Binding ===
|
# === Server Binding ===
|
||||||
[server]
|
[server]
|
||||||
port = 443
|
port = 443
|
||||||
# proxy_protocol = false # Enable if behind HAProxy/nginx with PROXY protocol
|
# proxy_protocol = false # Enable if behind HAProxy/nginx with PROXY protocol
|
||||||
# metrics_port = 9090
|
# metrics_port = 9090
|
||||||
# metrics_listen = "0.0.0.0:9090" # Listen address for metrics (overrides metrics_port)
|
# metrics_listen = "127.0.0.1:9090" # Listen address for metrics (overrides metrics_port)
|
||||||
# metrics_whitelist = ["127.0.0.1", "::1", "0.0.0.0/0"]
|
# metrics_whitelist = ["127.0.0.1/32", "::1/128"]
|
||||||
|
|
||||||
[server.api]
|
[server.api]
|
||||||
enabled = true
|
enabled = true
|
||||||
listen = "0.0.0.0:9091"
|
listen = "127.0.0.1:9091"
|
||||||
whitelist = ["127.0.0.0/8"]
|
whitelist = ["127.0.0.1/32", "::1/128"]
|
||||||
minimal_runtime_enabled = false
|
minimal_runtime_enabled = false
|
||||||
minimal_runtime_cache_ttl_ms = 1000
|
minimal_runtime_cache_ttl_ms = 1000
|
||||||
|
|
||||||
@@ -128,9 +128,9 @@ ip = "0.0.0.0"
|
|||||||
|
|
||||||
# === Anti-Censorship & Masking ===
|
# === Anti-Censorship & Masking ===
|
||||||
[censorship]
|
[censorship]
|
||||||
tls_domain = "petrovich.ru"
|
tls_domain = "petrovich.ru" # Fake-TLS / SNI masking domain used in generated ee-links
|
||||||
mask = true
|
mask = true
|
||||||
tls_emulation = true # Fetch real cert lengths and emulate TLS records
|
tls_emulation = true # Fetch real cert lengths and emulate TLS records
|
||||||
tls_front_dir = "tlsfront" # Cache directory for TLS emulation
|
tls_front_dir = "tlsfront" # Cache directory for TLS emulation
|
||||||
|
|
||||||
[access.users]
|
[access.users]
|
||||||
@@ -141,9 +141,9 @@ hello = "00000000000000000000000000000000"
|
|||||||
then Ctrl+S -> Ctrl+X to save
|
then Ctrl+S -> Ctrl+X to save
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Replace the value of the hello parameter with the value you obtained in step 0.
|
> Replace the value of the `hello` parameter with the value you obtained in step 0.
|
||||||
> Additionally, change the value of the tls_domain parameter to a different website.
|
> Additionally, change the value of the `tls_domain` parameter to a different website.
|
||||||
> Changing the tls_domain parameter will break all links that use the old domain!
|
> Changing the `tls_domain` parameter will break all links that use the old domain!
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -103,22 +103,22 @@ tls = true
|
|||||||
[general.links]
|
[general.links]
|
||||||
show = "*"
|
show = "*"
|
||||||
# show = ["alice", "bob"] # Показывать ссылки только для alice и bob
|
# show = ["alice", "bob"] # Показывать ссылки только для alice и bob
|
||||||
# show = "*" # Показывать ссылки для всех пользователей
|
# show = "*" # Показывать ссылки для всех пользователей
|
||||||
# public_host = "proxy.example.com" # Хост (IP-адрес или домен) для ссылок tg://
|
# public_host = "proxy.example.com" # Хост (IP-адрес или домен) для ссылок tg://
|
||||||
# public_port = 443 # Порт для ссылок tg:// (по умолчанию: server.port)
|
# public_port = 443 # Порт для ссылок tg:// (по умолчанию: server.port)
|
||||||
|
|
||||||
# === Привязка сервера ===
|
# === Привязка сервера ===
|
||||||
[server]
|
[server]
|
||||||
port = 443
|
port = 443
|
||||||
# proxy_protocol = false # Включите, если сервер находится за HAProxy/nginx с протоколом PROXY
|
# proxy_protocol = false # Включите, если сервер находится за HAProxy/nginx с протоколом PROXY
|
||||||
# metrics_port = 9090
|
# metrics_port = 9090
|
||||||
# metrics_listen = "0.0.0.0:9090" # Адрес прослушивания для метрик (переопределяет metrics_port)
|
# metrics_listen = "127.0.0.1:9090" # Адрес прослушивания для метрик (переопределяет metrics_port)
|
||||||
# metrics_whitelist = ["127.0.0.1", "::1", "0.0.0.0/0"]
|
# metrics_whitelist = ["127.0.0.1/32", "::1/128"]
|
||||||
|
|
||||||
[server.api]
|
[server.api]
|
||||||
enabled = true
|
enabled = true
|
||||||
listen = "0.0.0.0:9091"
|
listen = "127.0.0.1:9091"
|
||||||
whitelist = ["127.0.0.0/8"]
|
whitelist = ["127.0.0.1/32", "::1/128"]
|
||||||
minimal_runtime_enabled = false
|
minimal_runtime_enabled = false
|
||||||
minimal_runtime_cache_ttl_ms = 1000
|
minimal_runtime_cache_ttl_ms = 1000
|
||||||
|
|
||||||
@@ -128,9 +128,9 @@ ip = "0.0.0.0"
|
|||||||
|
|
||||||
# === Обход блокировок и маскировка ===
|
# === Обход блокировок и маскировка ===
|
||||||
[censorship]
|
[censorship]
|
||||||
tls_domain = "petrovich.ru"
|
tls_domain = "petrovich.ru" # Домен Fake-TLS / SNI, который будет использоваться в сгенерированных ee-ссылках
|
||||||
mask = true
|
mask = true
|
||||||
tls_emulation = true # Получить реальную длину сертификата и эмулировать запись TLS
|
tls_emulation = true # Получить реальную длину сертификата и эмулировать запись TLS
|
||||||
tls_front_dir = "tlsfront" # Директория кэша для эмуляции TLS
|
tls_front_dir = "tlsfront" # Директория кэша для эмуляции TLS
|
||||||
|
|
||||||
[access.users]
|
[access.users]
|
||||||
@@ -141,9 +141,9 @@ hello = "00000000000000000000000000000000"
|
|||||||
Затем нажмите Ctrl+S -> Ctrl+X, чтобы сохранить
|
Затем нажмите Ctrl+S -> Ctrl+X, чтобы сохранить
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Замените значение параметра hello на значение, которое вы получили в пункте 0.
|
> Замените значение параметра `hello` на значение, которое вы получили в пункте 0.
|
||||||
> Так же замените значение параметра tls_domain на другой сайт.
|
> Так же замените значение параметра `tls_domain` на другой сайт.
|
||||||
> Изменение параметра tls_domain сделает нерабочими все ссылки, использующие старый домен!
|
> Изменение параметра `tls_domain` сделает нерабочими все ссылки, использующие старый домен!
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user