2 Commits
6 changed files with 513 additions and 0 deletions
+189
View File
@@ -0,0 +1,189 @@
# =============================================================================
# Виртуальная машина внутри vApp — услуги 26 (vApp) и 28 (ВМ)
#
# Всё, что относится к ВМ, лежит ТОЛЬКО в этом файле: переменные, их значения
# по умолчанию, оба ресурса и выводы. Чтобы выключить ВМ — удалить или
# закомментировать этот файл (по аналогии с shturval.tf).
#
# Место в цепочке:
# орга (вручную в ЛК) → vDC (21) → Edge (22) → внешние IP → SNAT
# → [ vApp (26) → ВМ (28) ] → Штурвал (150)
#
# Зависимости (из манифестов услуг, сгенерированные ресурсы):
# vApp (26) — nubes_vapp: требует vdc_uid (21) и nsxt_uid (22)
# ВМ (28) — nubes_vc_vm_v3: требует vapp_uid (26)
#
# Внешний доступ: ВМ публикуется за общим SNAT эджа (same_snat = false), для
# этого ipSpace должен быть выделен на организации и включён как SNAT
# (см. modifiers.tf). Нужен ВЫДЕЛЕННЫЙ внешний адрес — same_snat = true.
# ipSpace для ВМ берём тот же, что у SNAT (var.ip_space_name).
#
# Режим destroy: у обеих услуг операция delete требует предварительного
# suspend, поэтому по умолчанию suspend_on_destroy = true («заморозка»).
# Полное удаление vApp возможно только через 14 дней после suspend.
# =============================================================================
# --- Переменные vApp ---
variable "vapp_resource_name" {
type = string
default = "fullpipe-vapp"
description = "Имя услуги «Виртуальный каталог ВМ (vApp)» в ЛК"
}
variable "vapp_name" {
type = string
default = "fullpipe-vapp-01"
description = "Имя vApp. Маска ^[a-z0-9][a-z0-9.-]{3,61}[a-z0-9]$, уникально в организации; участвует в DNS-имени ВМ. НЕ оставлять дефолтом платформы."
}
# --- Переменные ВМ ---
variable "vm_resource_name" {
type = string
default = "fullpipe-vm-01"
description = "Имя услуги «Виртуальная машина» в ЛК"
}
variable "vm_name" {
type = string
default = "web01"
description = "Имя ВМ. Маска ^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$. Определяет имя NSX-T IP Set: {vapp_name}-{vm_name}"
}
variable "vm_image" {
type = string
default = "Ubuntu_22-20G"
description = "Образ ОС. Доступные значения: RockyLinux_9-16G-cloudinit, Ubuntu_22-20G, Debian_13-20G. Не изменяется после создания"
}
variable "vm_cpu" {
type = number
default = 2
description = "vCPU (1..64), шт"
}
variable "vm_ram" {
type = number
default = 2
description = "RAM (1..256), GB"
}
variable "vm_disk" {
type = number
default = 20
description = "Дополнительный диск, GB (основной диск зависит от образа)"
}
variable "vm_user_login" {
type = string
default = "ubuntu"
description = "Учётка SSH. Не изменяется после создания"
}
variable "vm_user_public_key" {
type = string
# ВСЕ параметры ВМ живут в этом файле — включая ключ. Удалил файл — ВМ исключена
# из конфига полностью, в terraform.tfvars ничего про ВМ не остаётся.
# Здесь публичный ключ (не секрет), тот же, что в secrets/id_ed25519.pub.
# Переопределить можно в terraform.tfvars — но тогда при исключении ВМ
# надо удалить и эту строку (иного способа у Terraform нет).
default = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPR8S07Mnku1VlVR/lq6hCKPo9fNzJ+7E0DoE7bkvy4p tazet@narod.ru"
description = "Публичная часть SSH-ключа в формате OpenSSH. Не изменяется после создания. По умолчанию — ключ tazet@narod.ru"
}
variable "vm_access_port_list" {
type = list(object({
port = string
type = string
}))
default = [
{ port = "22", type = "tcp" }
]
description = "Белый список портов для доступа извне; type: tcp | udp | all"
}
variable "vm_access_ip_list" {
type = list(string)
default = ["0.0.0.0/0"]
description = "Белый список адресов, которым разрешён доступ к ВМ. Требует выделенного внешнего IP"
}
variable "vm_same_snat" {
type = bool
default = false
description = "false — публикация за общим SNAT эджа; true — за выделенным внешним IP услуги"
}
# --- vApp (услуга 26) ---
resource "nubes_vapp" "vapp" {
resource_name = var.vapp_resource_name
vapp_name = var.vapp_name
vdc_uid = nubes_vc_vdc.vdc.id # ref 21 — вычислительная инфраструктура
nsxt_uid = nubes_vc_nsxt.edge.id # ref 22 — сеть/маршрутизация
# «Заморозка»: destroy переводит vApp в suspend (delete требует suspend).
suspend_on_destroy = true
# Повторный apply усыновляет существующий vApp, а не падает с
# «РЕСУРС С ТАКИМ ИМЕНЕМ УЖЕ СУЩЕСТВУЕТ».
adopt_existing_on_create = true
# vApp требует готовую сеть (ipSpace на организации + SNAT на эдже).
depends_on = [nubes_vc_nsxt_snat.snat]
}
# --- ВМ (услуга 28) ---
resource "nubes_vc_vm_v3" "vm" {
resource_name = var.vm_resource_name
vm_name = var.vm_name
vapp_uid = nubes_vapp.vapp.id # ref 26 — ВМ размещается в vApp
image_vm = var.vm_image
vm_cpu = var.vm_cpu
vm_ram = var.vm_ram
vm_disk = var.vm_disk
user_login = var.vm_user_login
user_public_key = var.vm_user_public_key
# Внешний доступ
ip_space_name = var.ip_space_name # тот же ipSpace, что у SNAT эджа
same_snat = var.vm_same_snat
access_port_list = jsonencode(var.vm_access_port_list)
access_ip_list = jsonencode(var.vm_access_ip_list)
# «Заморозка»: destroy переводит ВМ в suspend.
suspend_on_destroy = true
adopt_existing_on_create = true
# ВМ создаётся платформой долго — поднимаем таймаут ожидания.
operation_timeout = "15m"
}
# --- Выводы ---
output "vapp_id" {
description = "UID созданного vApp (услуга 26)"
value = nubes_vapp.vapp.id
}
output "vapp_name" {
description = "Имя vApp"
value = nubes_vapp.vapp.vapp_name
}
output "vm_id" {
description = "UID созданной ВМ (услуга 28)"
value = nubes_vc_vm_v3.vm.id
}
output "vm_state_flat" {
description = "Плоский state ВМ — IP-адреса, статус и т.д."
value = nubes_vc_vm_v3.vm.state_out_flat
}
@@ -94,3 +94,73 @@ No Vultr IP deletion was performed in this work. The secondary address was only
## Important limitations ## Important limitations
The measurements prove the route worked at test time. They do not guarantee permanent availability: NUBES, Vultr, upstream providers, or network filtering policy can change independently. The measurements prove the route worked at test time. They do not guarantee permanent availability: NUBES, Vultr, upstream providers, or network filtering policy can change independently.
## Later the same day: optimisation attempt and its outcome
### Automation created
A reusable, idempotent tool was created outside this repository:
```text
/home/naeel/nubes/HowTo/vpn-transit/vpn-setup.sh check | apply | verify | passthrough | verify-passthrough | client-config | rollback
/home/naeel/nubes/HowTo/vpn-transit/client-config.json generated client config (chmod 600, contains UUID)
/home/naeel/nubes/HowTo/vpn-transit/README.md description, measurements, rollback
/home/naeel/nubes/HowTo/howto-vpn-transit-213-vultr-2026-09-28.md full report
```
Every change is preceded by a timestamped backup and followed by a config test (`nginx -t`, `xray run -test`) with automatic rollback on failure.
### Changes applied
| Host | File | Change | Backup |
|---|---|---|---|
| 213 | `/etc/nginx/sites-available/check.kube5s.ru` | `proxy_buffering off;` added inside `location /ws`, marked `# vpn-transit: proxy_buffering off` | `check.kube5s.ru.bak.1790601681` |
| Vultr | `/etc/v2ray-agent/xray/conf/00_log.json` | `loglevel`: `debug` → `warning` (log had grown to 76 MB), service restarted | `00_log.json.bak.1790601723` |
| 213 | `/usr/local/sbin/vpn-transit-dnat.sh`, `/etc/systemd/system/vpn-transit-dnat.service` | DNAT `213:8443 → 95.179.252.111:443` plus FORWARD rules, enabled at boot | none (rules tagged `vpn-transit`) |
### Measurements after the changes
- Outbound IP: `95.179.252.111`
- Throughput: `5.6–7.3 MiB/s` (10 MiB in 1.4–1.9 s)
- Per-connection latency: `0.23–0.37 s`
- WebSocket upgrade success rate on 213: `14569 / 14573` (99.97%), one `upstream timed out` error
### Hypothesis that was disproved: mux
`verify` compared the tunnel with and without `"mux": {"enabled": true, "concurrency": 8}`:
| Mode | 10 MiB download | Connection behaviour |
|---|---|---|
| without mux | 7.32 MiB/s in 1.43 s | stable |
| with mux | **0 B/s, failed** | after 4 requests connections hang for 15 s |
Conclusion: mux is harmful in the `VLESS + WebSocket behind nginx` combination. It is excluded from the client config. The test remains in the script for re-checking on future Xray versions.
### Optimisation that could not be delivered: removing the second TLS layer
The intended speed fix was to drop one TLS handshake (`client → 213`, then `213 → Vultr`) by forwarding TCP straight through to Vultr.
- `ngx_stream_module.so` is absent on 213, so nginx cannot do SNI-based passthrough without installing `libnginx-mod-stream`.
- Kernel-level DNAT on port 8443 was installed instead, but **does not work**: from outside, port 8443 returns `Connection refused` and the DNAT counter on 213 stays at 0 packets — traffic never reaches the machine.
- Cause: the provider firewall in front of 213 exposes only ports 80 and 443. Measured from `3060`: `3001, 8080, 8443, 8766, 8767, 8888, 18080, 40229` are closed.
- Therefore the second TLS layer can only be removed after the provider opens an additional port. The rules are already installed and would start working immediately once that happens.
### Errors made during this work
1. **Recommended `mux` before measuring it.** The recommendation was given as the main fix and was later disproved by measurement. Correct order: measure first, recommend after.
2. **Changed server configuration before measuring the benefit.** `proxy_buffering off` has no effect on a WebSocket connection after the `101 Switching Protocols` upgrade, and `loglevel` affects only log size. Neither change improves speed, so from the user's point of view nothing changed.
3. **Changed the client config to port 8443 before verifying the port was reachable from outside.** The config was regenerated back to port 443 immediately.
### Net result for the user
Nothing changed for the client: address `5.172.178.213`, port `443`, SNI `check.kube5s.ru`, path `/ws` and the UUID are unchanged, and the previously used link still works. No client-side reconfiguration is required.
The only actionable finding is client-side: the Xray log on Vultr contained **331** `connect: connection refused` to `127.0.0.1:45987`, i.e. the client requested a loopback address, plus Telegram advertises AAAA records while the tunnel is IPv4-only. The generated `client-config.json` addresses both (remote DNS, `queryStrategy: UseIPv4`), but the device itself was not modified.
Separately: **10170** `reset by peer` entries to `157.240.0.13` (Meta infrastructure) are blocking by those sites, unrelated to the transit.
### Scope audit (this action)
- Repository files changed: this document only. `git status` also showed unrelated pre-existing changes (`DEV_STAND/FullPipe/shturval.tf` deletion, `TMP/*` files) that were **not** touched or committed.
- Server-side files changed: as listed in the table above.
- Temporary test files on 3060: `/tmp/xray-test/*` (no permanent service installed).
+78
View File
@@ -0,0 +1,78 @@
# Список языковых моделей и агентов
> Данные перенесены из предоставленного списка. Достоверность названий, параметров и стоимости отдельно не проверялась.
## 1. DeepSeek
| Имя | Размер контекста | Возможности | Вход | Выход |
|---|---:|---|---:|---:|
| DeepSeek V4 Flash | 1M | Инструменты, Видение | Не указана | Не указана |
| DeepSeek V4 Flash Vision Exp | 1M | Инструменты, Видение | Не указана | Не указана |
| DeepSeek V4 Pro | 1M | Инструменты, Видение | Не указана | Не указана |
| DeepSeek V4.1 Hash | 1M | Инструменты, Видение | Не указана | Не указана |
## 2. Copilot
| Имя | Размер контекста | Возможности | Вход | Выход |
|---|---:|---|---:|---:|
| Auto | Не указан | Инструменты | Не указана | Не указана |
| Claude Fable 5 | 1M | Инструменты, Видение | 1000 | 5000 |
| Claude Fable 5.1 | 1M | Инструменты, Видение | 1000 | 5000 |
| Claude Haiku 4.5 | 160K | Инструменты, Видение | 100 | 500 |
| Claude Opus 4.7 | 1M | Инструменты, Видение | 500 | 2500 |
| Claude Opus 4.8 | 1M | Инструменты, Видение | 500 | 2500 |
| Claude Opus 4.8 (fast mode) (Preview) | 1M | Инструменты, Видение | 1000 | 5000 |
| Claude Opus 5 | 1M | Инструменты, Видение | 500 | 2500 |
| Claude Opus 5.5 | 1M | Инструменты, Видение | 400 | 2000 |
| Claude Sonnet 5 | 1M | Инструменты, Видение | 200 | 1000 |
| Gemini 3.5 Flash | 1M | Инструменты, Видение | 150 | 900 |
| Gemini 3.6 Flash | 1M | Инструменты, Видение | 75 | 375 |
| Gemini 3.7 Flash | 1M | Инструменты, Видение | 75 | 375 |
| Gemini 3.8 Flash | 1M | Инструменты, Видение | 75 | 375 |
| GPT-5 mini | 192K | Инструменты, Видение | 25 | 200 |
| GPT-5.3-Codex | 400K | Инструменты, Видение | 175 | 1400 |
| GPT-5.4 | 1M | Инструменты, Видение | 250 | 1500 |
| GPT-5.4 mini | 400K | Инструменты, Видение | 75 | 450 |
| GPT-5.5 | 1M | Инструменты, Видение | 500 | 3000 |
| GPT-5.6 Luna | 1M | Инструменты, Видение | 20 | 120 |
| GPT-5.6 Sol | 1M | Инструменты, Видение | 400 | 2000 |
| GPT-5.6 Terra | 1M | Инструменты, Видение | 200 | 1200 |
| GPT-6 Astra | 1M | Инструменты, Видение | 1000 | 5000 |
| GPT-6 Luna | 1M | Инструменты, Видение | 10 | 50 |
## 3. Общий список языковых моделей
Стоимость указана в кредитах за 1 млн токенов.
| Имя | Размер контекста | Возможности | Вход | Выход |
|---|---:|---|---:|---:|
| Claude Fable 5 | 1M | Инструменты, Видение | 1000 | 5000 |
| Claude Fable 5.1 | 1M | Инструменты, Видение | 1000 | 5000 |
| Claude Haiku 4.5 | 160K | Инструменты, Видение | 100 | 500 |
| Claude Opus 4.7 | 1M | Инструменты, Видение | 500 | 2500 |
| Claude Opus 4.8 | 1M | Инструменты, Видение | 500 | 2500 |
| Claude Opus 4.8 (fast mode) | 1M | Инструменты, Видение | 1000 | 5000 |
| Claude Opus 5 | 1M | Инструменты, Видение | 500 | 2500 |
| Claude Opus 5.5 | 1.1M | Инструменты, Видение | 400 | 2000 |
| Claude Sonnet 5 | 1M | Инструменты, Видение | 200 | 1000 |
| Gemini 3.5 Flash | 1M | Инструменты, Видение | 150 | 900 |
| Gemini 3.6 Flash | 1M | Инструменты, Видение | 75 | 375 |
| Gemini 3.7 Flash | 1M | Инструменты, Видение | 75 | 375 |
| Gemini 3.8 Flash | 1M | Инструменты, Видение | 75 | 375 |
| GPT-5 mini | 192K | Инструменты, Видение | 25 | 200 |
| GPT-5.3-Codex | 400K | Инструменты, Видение | 175 | 1400 |
| GPT-5.4 | 1M | Инструменты, Видение | 250 | 1500 |
| GPT-5.4 mini | 400K | Инструменты, Видение | 75 | 450 |
| GPT-5.5 | 1M | Инструменты, Видение | 500 | 3000 |
| GPT-5.6 Luna | 1M | Инструменты, Видение | 20 | 120 |
| GPT-5.6 Sol | 1M | Инструменты, Видение | 400 | 2000 |
| GPT-5.6 Terra | 1M | Инструменты, Видение | 200 | 1200 |
| GPT-6 Astra | 1.1M | Инструменты, Видение | 1000 | 5000 |
| GPT-6 Luna | 1M | Инструменты, Видение | 10 | 50 |
| GPT-6 Sol | 1M | Инструменты, Видение | 200 | 1000 |
| Grok 4.5 | 500K / 553K | Инструменты, Видение | 200 | 600 |
| Grok 4.6 | 500K / 553K | Инструменты, Видение | 200 | 600 |
| Grok 4.7 | 500K / 553K | Инструменты, Видение | 200 | 600 |
| Kimi K2.7 Code | 256K | Инструменты, Видение | 95 | 400 |
| Kimi K3 | 1M | Инструменты, Видение | 300 | 1500 |
| MAI Code 1.1-Flash | 256K | Инструменты, Видение | 20 | 120 |
+176
View File
@@ -0,0 +1,176 @@
# adidas Terrex Anylander Unisex Trail Shoes
## Навигация и доступность
- Нажмите Alt+1 для режима чтения с экрана.
- Нажмите Alt+0 для отмены.
- Используйте сайт в режиме чтения с экрана.
- Руководство по доступности для чтения с экрана, отзывов и сообщений о проблемах.
- Перейти к содержимому.
## Магазин
Cosmos Sport
- 22 594000
- Заработайте x10 CASHBACK при первой покупке GoX.
- EASY RETURN
- FIND YOUR ORDER
- «GOX» и найдите предложение.
- Новинки
- Мужчины
- Женщины
- Дети
- Аксессуары
- Спорт
- Бренды
- Распродажи
- Подарочная карта
## Предложения
- Новинки. Только что запущено.
- Не пропустите: заработайте до 20 € в GoX Wallet.
- Не пропустите: On Shoes.
- Откройте коллекцию.
- Чёрные кроссовки.
- Исследуйте коллекцию.
## Товар
**Главная → Спорт → Лыжи → adidas Terrex Anylander Unisex Trail Shoes**
- Посмотреть похожие товары
- Бренд: adidas Terrex
- Название: adidas Terrex Anylander Unisex Trail Shoes
- Цена: €75.00
- Артикул: `9000198351_63596`
- Размер: выберите размер
- Таблица размеров
- Добавить в корзину
- Оформить заказ
- Наличие в магазинах
- Самовывоз из магазина за 2 часа
- Выберите цвет
Участник GoX получает 0,75 € кэшбэка. Зарегистрироваться.
- Бесплатный возврат в течение 30 дней.
- BOX NOW Lockers: быстрая доставка 24/7.
- Ваш заказ уже в пути!
- История цен.
## Характеристики
- Вес: 390 г.
- Перепад: 10 мм.
## Описание
### Уход за обувью
### Доставка и возврат
Бесплатная доставка и возврат.
### Описание товара
adidas Terrex Anylander Unisex Trail Shoes предназначены для коротких прогулок по лесу и длительных однодневных походов. Эти туристические кроссовки adidas Terrex обеспечивают поддержку и комфорт на разных типах троп. Низкая посадка и мягкая амортизация в межподошве обеспечивают лёгкость и комфорт. Рельефная подошва Traxion даёт сцепление во всех направлениях и помогает уверенно держаться на поверхности.
Используя переработанные материалы, adidas повторно применяет уже созданные материалы и сокращает отходы. Возобновляемые материалы помогают снизить зависимость от ограниченных ресурсов. В моделях, изготовленных из смеси переработанных и возобновляемых материалов, их общая доля составляет не менее 20%.
### Особенности
- Обычная посадка.
- Шнуровка.
- Текстильный верх с усиленным носком.
- Текстильная подкладка.
- Межподошва EVA.
- Подошва Traxion.
- Вес: 390 г, размер UK 8,5.
- Перепад межподошвы: 10 мм; пятка 27 мм, носок 17 мм.
- Содержит не менее 20% переработанных и возобновляемых материалов.
- Цвет: чёрный.
- SKU: `ID0895`
- Артикул: `9000198351_63596`
## О бренде adidas Terrex
adidas Terrex — линейка экипировки adidas для пешего туризма, альпинизма, трейлраннинга и скалолазания. Она является значимым продолжением спортивных традиций adidas и предлагает инновационные решения для активного отдыха.
Линейка была запущена в конце 2000-х годов, когда adidas заметила растущую потребность в прочной и высокопроизводительной экипировке. Ассортимент Terrex значительно расширился и включает товары, отличающиеся долговечностью, технологичностью и функциональностью.
Terrex уделяет внимание устойчивому развитию и стремится уменьшить воздействие на окружающую среду. Бренд использует переработанные материалы и внедряет экологичные производственные практики.
adidas Terrex продолжает развиваться и внедрять инновации, помогая спортсменам расширять свои возможности и безопасно наслаждаться природой.
## Связанные категории
- Купить больше: мужская одежда, обувь и аксессуары.
- Купить больше: женская коллекция.
- Купить больше: мужская одежда, обувь и аксессуары → мужская обувь.
- Купить больше: женская коллекция → женская обувь.
- Купить больше: модели для трейлраннинга и походов.
- Купить больше: мужская одежда, обувь и аксессуары adidas.
- Купить больше: мужская одежда, обувь и аксессуары → мужская обувь → мужские трейловые кроссовки.
## Сервисы Cosmos Sport
- Электронная подарочная карта: подарки на выбор среди более чем 20 000 моделей; номинал от 20 €.
- Бесплатный Click & Collect в 40 пунктах.
- BOX NOW: бесплатная доставка в постаматы.
- GoX Cashback: 1% кэшбэка в GoX Wallet для следующих покупок.
- Магазин для спортсменов: более 60 брендов.
- Бесплатный Click & Collect в более чем 40 пунктах.
- Бесплатный возврат в течение 30 дней.
- Бесплатная доставка при заказе от 49 €.
## Новости и контакты
CosmosNews: получайте первые предложения со скидками до 30% и эксклюзивные предложения.
Интересует:
- Мужчина.
- Женщина.
- Ребёнок.
Популярные ссылки:
- Найти заказ.
- Бесплатная доставка при заказе от 49 €.
- Бесплатный возврат в течение 30 дней.
- Контакты.
- 22 594000.
- Часы работы колл-центра: понедельник–пятница 09:00–21:00, суббота 09:00–20:00.
## Компания
- Магазины и пункты выдачи.
- Наша история.
- GoX.
- Условия и положения.
- Вакансии.
- Условия использования.
- Корпоративная социальная ответственность.
- Cosmos People.
- Льготы.
- TEAM WEAR.
## Обслуживание
- Служба поддержки.
- Контакты.
- Бесплатный возврат любым способом.
- Доставка и получение товаров.
- Способы оплаты.
- Бесплатный Click & Collect.
- Часто задаваемые вопросы.
- Подарочные карты и электронные подарочные карты.
- Политика конфиденциальности.
- Файлы cookie.
- Декларация о файлах cookie.
Присоединяйтесь: Facebook, Instagram.
© 2026 CosmosSport. Разработано Sleed.