# Host Name - Имя хоста и информация о системе

> Подробное руководство по настройке имени хоста, доменного имени и статических записей host в VyOS. Включает примеры для Yandex Cloud и VK Cloud.

Source: https://opennix.org/docs/vyos/system/vyos-host-name/


Имя хоста (hostname) - это уникальное имя, которое идентифицирует устройство в сети; вместе с доменным именем оно образует полное доменное имя (FQDN). Данная страница описывает настройку имени хоста, доменного имени и статических записей разрешения имен в VyOS. Эти параметры являются базовыми для идентификации устройства в сети и корректной работы сетевых служб.

## Обзор

Имя хоста и доменное имя используются для:

- **Идентификации устройства** в сети
- **Формирования FQDN** (Fully Qualified Domain Name)
- **Логирования** и мониторинга
- **Интеграции с облачными платформами** (Yandex Cloud, VK Cloud)
- **DNS-резолюции** локальных имен
- **Работы сетевых служб** (NTP, SNMP, syslog)

## Имя хоста (Hostname)

### Описание

Имя хоста - это уникальная метка, идентифицирующая устройство в сети. В VyOS имя хоста используется:

- В приглашении командной строки (CLI prompt)
- В логах системы
- В SNMP system name
- Как часть FQDN при наличии доменного имени

### Ограничения RFC 1123

Имя хоста должно соответствовать стандарту RFC 1123:

**Длина:**
- Минимум: 1 символ
- Максимум: 63 символа

**Допустимые символы:**
- Буквы латинского алфавита: a-z, A-Z
- Цифры: 0-9
- Дефис: - (только внутри имени)

**Правила:**
- Должно начинаться с буквы или цифры
- Должно заканчиваться буквой или цифрой
- Внутри может содержать буквы, цифры и дефисы
- Регистр не учитывается (case-insensitive)
- Не может содержать точки, подчеркивания или другие специальные символы

### Конфигурация

#### Базовая настройка

```bash
# Установка имени хоста
set system host-name vyos-router

# Применение конфигурации
commit
save
```

#### Примеры валидных имен

```bash
# Короткое имя
set system host-name gateway

# Имя с цифрами
set system host-name router01

# Имя с дефисами
set system host-name core-router-01

# Максимальная длина (63 символа)
set system host-name vyos-production-core-router-datacenter-moscow-rack-12-unit-1
```

#### Примеры невалидных имен

```bash
# ОШИБКА: начинается с дефиса
set system host-name -router

# ОШИБКА: заканчивается дефисом
set system host-name router-

# ОШИБКА: содержит подчеркивание
set system host-name vyos_router

# ОШИБКА: содержит точку
set system host-name vyos.router

# ОШИБКА: содержит пробел
set system host-name "vyos router"

# ОШИБКА: более 63 символов
set system host-name vyos-production-core-router-datacenter-moscow-rack-12-unit-1-mgmt
```

### Значение по умолчанию

При первой загрузке VyOS использует имя хоста по умолчанию:

```bash
vyos@vyos:~$
```

После настройки имени хоста приглашение CLI изменится:

```bash
# После установки host-name gateway
vyos@gateway:~$
```

## Доменное имя (Domain Name)

### Описание

Доменное имя определяет DNS-суффикс, добавляемый к неполным именам хостов для формирования FQDN (Fully Qualified Domain Name).

**Принцип работы:**
- Если указан только hostname без домена, используется как есть
- Если указан hostname и domain-name, формируется FQDN: `hostname.domain-name`
- При резолюции неполных имен автоматически добавляется суффикс домена

### Конфигурация

#### Базовая настройка

```bash
# Установка доменного имени
set system domain-name example.com

# Применение конфигурации
commit
save
```

#### Полная конфигурация hostname + domain

```bash
# Установка имени хоста и домена
set system host-name router01
set system domain-name corp.example.com

# Результат: FQDN = router01.corp.example.com
commit
save
```

### Примеры использования

```bash
# Корпоративная сеть
set system host-name core-router
set system domain-name datacenter.moscow.mycompany.ru

# FQDN: core-router.datacenter.moscow.mycompany.ru
```

```bash
# Облачная инфраструктура
set system host-name vyos-gw
set system domain-name cloud.internal

# FQDN: vyos-gw.cloud.internal
```

### Влияние на резолюцию имен

При настроенном domain-name система автоматически добавляет его к неполным именам:

```bash
# С настройкой: set system domain-name example.com

# ping server -> DNS запрос для server.example.com
vyos@router:~$ ping server

# Для полных имен суффикс не добавляется
vyos@router:~$ ping server.otherdomain.com
```

## Статические записи хостов (Static Host Mapping)

### Описание

Статические записи хостов позволяют создавать локальное разрешение имен в IP-адреса без использования внешнего DNS-сервера. Это аналог ручного редактирования файла `/etc/hosts`, но с управлением через конфигурацию VyOS.

**Преимущества:**
- Управление через конфигурацию VyOS (commit/rollback)
- Автоматическая генерация `/etc/hosts` при загрузке
- Поддержка множественных алиасов для одного хоста
- Сохранение при перезагрузке

**Предупреждение:**
Не редактируйте файл `/etc/hosts` вручную - он автоматически перезаписывается при загрузке системы из конфигурации VyOS.

### Конфигурация

#### Базовая запись

```bash
# Добавление статической записи хоста
set system static-host-mapping host-name server1.example.com inet 192.168.1.10

# Применение конфигурации
commit
save
```

#### Запись с алиасами

```bash
# Основная запись
set system static-host-mapping host-name db-server.corp.local inet 10.0.1.100

# Добавление алиасов
set system static-host-mapping host-name db-server.corp.local alias database
set system static-host-mapping host-name db-server.corp.local alias db
set system static-host-mapping host-name db-server.corp.local alias mysql-primary

# Результат в /etc/hosts:
# 10.0.1.100 db-server.corp.local database db mysql-primary
```

#### Множественные хосты

```bash
# Внутренние серверы
set system static-host-mapping host-name web01.local inet 10.0.10.11
set system static-host-mapping host-name web02.local inet 10.0.10.12
set system static-host-mapping host-name db01.local inet 10.0.10.21
set system static-host-mapping host-name cache01.local inet 10.0.10.31

# Алиасы для веб-серверов
set system static-host-mapping host-name web01.local alias www1
set system static-host-mapping host-name web02.local alias www2

# Алиасы для базы данных
set system static-host-mapping host-name db01.local alias database
set system static-host-mapping host-name db01.local alias postgres

# Алиасы для кэша
set system static-host-mapping host-name cache01.local alias redis
set system static-host-mapping host-name cache01.local alias cache
```

### IPv6 поддержка

```bash
# IPv4 запись
set system static-host-mapping host-name server.example.com inet 192.168.1.10

# IPv6 запись (если поддерживается)
set system static-host-mapping host-name server.example.com inet6 2001:db8::10

# Dual-stack хост
set system static-host-mapping host-name webserver.local inet 10.0.1.50
set system static-host-mapping host-name webserver.local inet6 fd00::50
set system static-host-mapping host-name webserver.local alias www
```

### Удаление записей

```bash
# Удаление конкретного алиаса
delete system static-host-mapping host-name server.local alias www

# Удаление всей записи хоста
delete system static-host-mapping host-name server.local

# Применение изменений
commit
save
```

## Примеры для облачных платформ

### Пример 1: Yandex Cloud - Cloud-init vs статическая конфигурация

В Yandex Cloud имя хоста может устанавливаться через cloud-init при создании VM. Однако для гарантированного сохранения имени рекомендуется использовать конфигурацию VyOS.

#### Сценарий: Конфликт cloud-init и VyOS config

```bash
# Ситуация: cloud-init устанавливает hostname "instance-1"
# Требуется: переопределить на "vyos-edge-router"

# Решение: Настройка в VyOS имеет приоритет
configure
set system host-name vyos-edge-router
set system domain-name ru-central1.internal

# Статические записи для внутренних сервисов Yandex Cloud
set system static-host-mapping host-name metadata.yandex inet 169.254.169.254
set system static-host-mapping host-name metadata.yandex alias metadata

# Внутренние серверы в Yandex Cloud
set system static-host-mapping host-name app-server-1.ru-central1.internal inet 10.128.0.10
set system static-host-mapping host-name app-server-2.ru-central1.internal inet 10.128.0.11
set system static-host-mapping host-name db-master.ru-central1.internal inet 10.129.0.5

commit
save
exit
```

#### Проверка приоритета конфигурации

```bash
# Проверка установленного имени хоста
vyos@vyos-edge-router:~$ show host name
vyos-edge-router

# Проверка FQDN
vyos@vyos-edge-router:~$ hostname -f
vyos-edge-router.ru-central1.internal

# Проверка разрешения metadata сервера
vyos@vyos-edge-router:~$ ping metadata
PING metadata.yandex (169.254.169.254) 56(84) bytes of data.
```

#### Post-deployment скрипт для Yandex Cloud

```bash
#!/bin/vbash
# vyos-yandex-cloud-init.sh
# Скрипт для настройки VyOS в Yandex Cloud после деплоя

source /opt/vyatta/etc/functions/script-template

configure

# Базовая конфигурация хоста
set system host-name vyos-router-{{ zone_id }}
set system domain-name {{ folder_name }}.yandex.internal

# Yandex Cloud metadata service
set system static-host-mapping host-name metadata.yandex.cloud inet 169.254.169.254
set system static-host-mapping host-name metadata.yandex.cloud alias metadata
set system static-host-mapping host-name metadata.yandex.cloud alias cloud-init

# DNS серверы Yandex Cloud
set system name-server 192.168.0.2

commit
save
exit
```

### Пример 2: VK Cloud - DNS резолюция с статическими хостами

В VK Cloud часто требуется настройка локальных имен для внутренних сервисов при отсутствии корпоративного DNS.

#### Конфигурация для VK Cloud проекта

```bash
configure

# Основная конфигурация
set system host-name vkcloud-gateway
set system domain-name msk1.cloud.vk.com

# Статические записи для VK Cloud infrastructure endpoints
set system static-host-mapping host-name infra.mail.ru inet 10.0.0.1
set system static-host-mapping host-name infra.mail.ru alias vk-infra

# Внутренние серверы проекта
set system static-host-mapping host-name app-frontend.msk1.cloud.vk.com inet 10.0.10.10
set system static-host-mapping host-name app-frontend.msk1.cloud.vk.com alias frontend
set system static-host-mapping host-name app-frontend.msk1.cloud.vk.com alias web

set system static-host-mapping host-name app-backend.msk1.cloud.vk.com inet 10.0.10.20
set system static-host-mapping host-name app-backend.msk1.cloud.vk.com alias backend
set system static-host-mapping host-name app-backend.msk1.cloud.vk.com alias api

set system static-host-mapping host-name db-postgres.msk1.cloud.vk.com inet 10.0.20.5
set system static-host-mapping host-name db-postgres.msk1.cloud.vk.com alias database
set system static-host-mapping host-name db-postgres.msk1.cloud.vk.com alias postgres
set system static-host-mapping host-name db-postgres.msk1.cloud.vk.com alias db

set system static-host-mapping host-name cache-redis.msk1.cloud.vk.com inet 10.0.20.15
set system static-host-mapping host-name cache-redis.msk1.cloud.vk.com alias redis
set system static-host-mapping host-name cache-redis.msk1.cloud.vk.com alias cache

# Monitoring и logging
set system static-host-mapping host-name monitoring.msk1.cloud.vk.com inet 10.0.30.10
set system static-host-mapping host-name monitoring.msk1.cloud.vk.com alias prometheus
set system static-host-mapping host-name monitoring.msk1.cloud.vk.com alias grafana

set system static-host-mapping host-name logging.msk1.cloud.vk.com inet 10.0.30.20
set system static-host-mapping host-name logging.msk1.cloud.vk.com alias syslog
set system static-host-mapping host-name logging.msk1.cloud.vk.com alias logs

commit
save
exit
```

#### Тестирование резолюции

```bash
# Проверка разрешения по полному имени
vyos@vkcloud-gateway:~$ ping app-frontend.msk1.cloud.vk.com
PING app-frontend.msk1.cloud.vk.com (10.0.10.10) 56(84) bytes of data.

# Проверка разрешения по алиасу
vyos@vkcloud-gateway:~$ ping frontend
PING app-frontend.msk1.cloud.vk.com (10.0.10.10) 56(84) bytes of data.

# Проверка разрешения с автодобавлением домена
vyos@vkcloud-gateway:~$ ping app-backend
PING app-backend.msk1.cloud.vk.com (10.0.10.20) 56(84) bytes of data.

# Проверка содержимого /etc/hosts
vyos@vkcloud-gateway:~$ cat /etc/hosts
```

### Пример 3: Гибридная конфигурация с внешним DNS

```bash
configure

# Основная конфигурация
set system host-name border-router
set system domain-name production.internal

# DNS серверы (внешние + локальные)
set system name-server 8.8.8.8
set system name-server 8.8.4.4
set system name-server 192.168.1.53

# Статические записи для критичных локальных сервисов
# (используются при недоступности DNS)
set system static-host-mapping host-name dc1-core.production.internal inet 192.168.1.1
set system static-host-mapping host-name dc1-core.production.internal alias core-switch

set system static-host-mapping host-name dc1-fw.production.internal inet 192.168.1.254
set system static-host-mapping host-name dc1-fw.production.internal alias firewall

set system static-host-mapping host-name ntp-primary.production.internal inet 192.168.1.10
set system static-host-mapping host-name ntp-primary.production.internal alias ntp

set system static-host-mapping host-name dns-primary.production.internal inet 192.168.1.53
set system static-host-mapping host-name dns-primary.production.internal alias dns

commit
save
exit
```

## Команды проверки и мониторинга

### Проверка текущей конфигурации

```bash
# Показать настроенное имя хоста
show host name

# Показать информацию о хосте (hostname + domain)
show host

# Показать FQDN
show host fqdn

# Показать все статические записи
show system static-host-mapping

# Показать конфигурацию системы
show configuration system
```

### Проверка на уровне ОС

```bash
# Текущее имя хоста (короткое)
hostname

# FQDN
hostname -f

# Все имена хоста
hostname -A

# Доменное имя
hostname -d

# Содержимое /etc/hosts
cat /etc/hosts

# Содержимое /etc/hostname
cat /etc/hostname

# Резолюция через getent
getent hosts server.local
```

### Тестирование DNS резолюции

```bash
# Ping по имени
ping server.local

# DNS lookup с nslookup
nslookup server.local

# DNS lookup с dig
dig server.local

# DNS lookup с host
host server.local

# Трассировка резолюции
dig +trace server.local
```

### Примеры вывода команд

#### show host

```bash
vyos@router01:~$ show host
Hostname: router01
Domain:   corp.example.com
FQDN:     router01.corp.example.com
```

#### show host name

```bash
vyos@router01:~$ show host name
router01
```

#### show system static-host-mapping

```bash
vyos@router01:~$ show system static-host-mapping
host-name           inet            alias
db-server.local     10.0.1.100      database, db, mysql
web01.local         10.0.10.11      www1
web02.local         10.0.10.12      www2
```

#### cat /etc/hosts (сгенерированный)

```bash
vyos@router01:~$ cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       router01.corp.example.com router01

# Static host mappings
10.0.1.100      db-server.local database db mysql
10.0.10.11      web01.local www1
10.0.10.12      web02.local www2

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
```

## Устранение неполадок (Troubleshooting)

### Проблема 1: Имя хоста не применяется после commit

**Симптомы:**
- Команда `show host name` показывает новое имя
- Приглашение CLI не изменилось
- `hostname` команда показывает старое значение

**Диагностика:**

```bash
# Проверить конфигурацию
show configuration system host-name

# Проверить на уровне ОС
hostname
cat /etc/hostname
```

**Решение:**

```bash
# Пересохранить конфигурацию
configure
commit
save
exit

# Перезапустить сеанс SSH (reconnect)
# или выполнить
sudo systemctl restart vyos-router
```

### Проблема 2: Статические записи не работают

**Симптомы:**
- `ping server.local` не работает
- `cat /etc/hosts` не содержит статических записей

**Диагностика:**

```bash
# Проверить конфигурацию статических записей
show configuration system static-host-mapping

# Проверить /etc/hosts
cat /etc/hosts

# Проверить порядок резолюции
cat /etc/nsswitch.conf | grep hosts
```

**Решение:**

```bash
# Убедиться что конфигурация применена
configure
show system static-host-mapping
commit
save
exit

# Принудительно перегенерировать /etc/hosts
sudo /opt/vyatta/sbin/vyatta-update-hosts.pl

# Проверить результат
cat /etc/hosts
```

### Проблема 3: FQDN формируется неправильно

**Симптомы:**
- `hostname -f` возвращает неправильное значение
- FQDN не содержит доменное имя

**Диагностика:**

```bash
# Проверить hostname и domain отдельно
show host name
show configuration system domain-name

# Проверить на уровне ОС
hostname -s    # короткое имя
hostname -f    # FQDN
hostname -d    # домен
```

**Решение:**

```bash
configure

# Проверить и исправить конфигурацию
set system host-name correct-hostname
set system domain-name correct.domain.com

commit
save
exit

# Проверить результат
hostname -f
```

### Проблема 4: Cloud-init переопределяет hostname

**Симптомы:**
- После перезагрузки hostname возвращается к значению из cloud-init
- VyOS конфигурация игнорируется

**Диагностика:**

```bash
# Проверить cloud-init конфигурацию
cat /etc/cloud/cloud.cfg | grep preserve_hostname

# Проверить логи cloud-init
cat /var/log/cloud-init.log | grep hostname
```

**Решение:**

```bash
# Отключить управление hostname через cloud-init
sudo vi /etc/cloud/cloud.cfg

# Изменить:
# preserve_hostname: false
# на:
# preserve_hostname: true

# Или добавить в VyOS конфигурацию приоритет
configure
set system host-name my-vyos-router
commit
save
exit

# Перезагрузить для проверки
sudo reboot
```

### Проблема 5: DNS резолюция игнорирует static-host-mapping

**Симптомы:**
- `ping server.local` идет в DNS вместо локального /etc/hosts
- Внешний DNS возвращает NXDOMAIN

**Диагностика:**

```bash
# Проверить порядок резолюции
cat /etc/nsswitch.conf | grep hosts

# Должно быть:
# hosts: files dns
# НЕ:
# hosts: dns files

# Проверить /etc/hosts
cat /etc/hosts | grep server.local
```

**Решение:**

```bash
# Убедиться что запись есть в конфигурации
configure
show system static-host-mapping
commit
save
exit

# Если nsswitch.conf неправильный, это баг VyOS
# Временное решение:
sudo vi /etc/nsswitch.conf
# Изменить строку hosts на: hosts: files dns

# Перманентное решение - обновить VyOS или создать post-config скрипт
```

## Лучшие практики (Best Practices)

### 1. Именование хостов

**Используйте описательные, структурированные имена:**

```bash
# Хорошо: роль-локация-номер
set system host-name vyos-gw-msk-01
set system host-name vyos-fw-spb-02
set system host-name vyos-edge-kzn-01

# Плохо: непонятные или слишком длинные
set system host-name router
set system host-name x
set system host-name my-super-duper-production-vyos-router-in-moscow
```

**Используйте консистентную схему:**

```bash
# Схема: сервис-тип-зона-id
set system host-name web-frontend-dc1-01
set system host-name db-postgres-dc1-master
set system host-name cache-redis-dc2-01
```

### 2. Доменные имена

**Используйте внутренние домены для приватных сетей:**

```bash
# Хорошо: .internal, .local, .private, .lan
set system domain-name corp.internal
set system domain-name datacenter.local
set system domain-name cloud.private

# Избегайте: публичные домены для внутренних сетей
# Плохо:
set system domain-name example.com  # если не используется реально
```

**Отражайте структуру сети в доменах:**

```bash
# Иерархическая структура
set system domain-name moscow.datacenter.mycompany.internal
set system domain-name production.cloud.mycompany.ru
set system domain-name dmz.external.mycompany.net
```

### 3. Статические записи хостов

**Документируйте назначение записей:**

```bash
configure

# Infrastructure services - критичные сервисы
set system static-host-mapping host-name ntp.internal inet 10.0.0.10
set system static-host-mapping host-name ntp.internal alias time

set system static-host-mapping host-name dns.internal inet 10.0.0.53
set system static-host-mapping host-name dns.internal alias resolver

# Application servers - прикладные серверы
set system static-host-mapping host-name app01.internal inet 10.0.10.11
set system static-host-mapping host-name app02.internal inet 10.0.10.12

commit
save
exit
```

**Используйте алиасы для удобства:**

```bash
# Полное имя + короткие алиасы
set system static-host-mapping host-name database-primary.internal inet 10.0.20.5
set system static-host-mapping host-name database-primary.internal alias db
set system static-host-mapping host-name database-primary.internal alias postgres
set system static-host-mapping host-name database-primary.internal alias primary
```

### 4. Резервирование критичных записей

**Дублируйте DNS в static-host-mapping:**

```bash
# Критичные сервисы должны резолвиться даже при падении DNS
set system static-host-mapping host-name ntp-server.internal inet 192.168.1.10
set system static-host-mapping host-name dns-server.internal inet 192.168.1.53
set system static-host-mapping host-name mgmt-gateway.internal inet 192.168.1.1
set system static-host-mapping host-name syslog-server.internal inet 192.168.1.100
```

### 5. Интеграция с Cloud провайдерами

**Yandex Cloud:**

```bash
# Используйте зональные имена
set system host-name vyos-gw-ru-central1-a
set system domain-name ru-central1.internal

# Добавляйте metadata service
set system static-host-mapping host-name metadata.yandex inet 169.254.169.254
```

**VK Cloud:**

```bash
# Используйте регион в именовании
set system host-name vyos-router-msk1
set system domain-name msk1.cloud.internal

# Добавляйте Cloud infrastructure endpoints
set system static-host-mapping host-name infra.mail.ru inet 10.0.0.1
```

### 6. Версионирование конфигурации

**Используйте commit-комментарии:**

```bash
configure
set system host-name new-router-name
commit comment "Changed hostname from old-router to new-router-name for standardization"
save
```

**Делайте бэкапы перед изменениями:**

```bash
# Сохранить текущую конфигурацию
save /config/backup-before-hostname-change.config

# Внести изменения
configure
set system host-name new-name
commit
save
```

### 7. Мониторинг и аудит

**Регулярно проверяйте соответствие:**

```bash
# Скрипт проверки hostname соответствия
#!/bin/bash

VYOS_HOSTNAME=$(show host name)
OS_HOSTNAME=$(hostname)

if [ "$VYOS_HOSTNAME" != "$OS_HOSTNAME" ]; then
    echo "WARNING: Hostname mismatch!"
    echo "VyOS config: $VYOS_HOSTNAME"
    echo "OS hostname: $OS_HOSTNAME"
fi
```

**Логируйте изменения:**

```bash
# Просмотр истории изменений hostname
show system commit

# Просмотр конкретного коммита
show system commit diff <commit-number>
```

## Интеграция с другими сервисами VyOS

### SNMP

Hostname используется как SNMPv2-MIB::sysName:

```bash
configure
set system host-name core-router-01
set service snmp community public
commit
save
exit

# SNMP запрос покажет hostname
snmpget -v2c -c public localhost SNMPv2-MIB::sysName.0
# Вывод: SNMPv2-MIB::sysName.0 = STRING: core-router-01
```

### Syslog

Hostname включается в сyslog сообщения:

```bash
configure
set system host-name vyos-gateway
set system syslog global facility all level info
set system syslog host 10.0.0.100 facility all level warning
commit
save
exit

# Syslog messages будут содержать hostname:
# Dec 15 10:30:45 vyos-gateway systemd[1]: Started VyOS Router.
```

### NTP

При настройке NTP сервера hostname используется в идентификации:

```bash
configure
set system host-name ntp-client-router
set system ntp server 0.pool.ntp.org
set system ntp server 1.pool.ntp.org
commit
save
exit
```

### SSH Banner

Hostname может использоваться в SSH баннере:

```bash
configure
set system host-name secure-gateway
set system login banner pre-login "
****************************************************
  Authorized access only!
  Hostname: secure-gateway
  Location: Moscow Datacenter
****************************************************
"
commit
save
exit
```

## Примеры полных конфигураций

### Конфигурация 1: Корпоративный шлюз

```bash
configure

# Hostname и domain
set system host-name corp-gateway-msk
set system domain-name moscow.corp.internal

# Внутренние серверы
set system static-host-mapping host-name dc-controller.moscow.corp.internal inet 10.10.0.10
set system static-host-mapping host-name dc-controller.moscow.corp.internal alias dc
set system static-host-mapping host-name dc-controller.moscow.corp.internal alias ad

set system static-host-mapping host-name exchange.moscow.corp.internal inet 10.10.0.20
set system static-host-mapping host-name exchange.moscow.corp.internal alias mail

set system static-host-mapping host-name fileserver.moscow.corp.internal inet 10.10.0.30
set system static-host-mapping host-name fileserver.moscow.corp.internal alias fs
set system static-host-mapping host-name fileserver.moscow.corp.internal alias files

# Infrastructure
set system static-host-mapping host-name ntp.moscow.corp.internal inet 10.10.0.1
set system static-host-mapping host-name ntp.moscow.core.internal alias time

set system static-host-mapping host-name dns.moscow.corp.internal inet 10.10.0.2
set system static-host-mapping host-name dns.moscow.corp.internal alias resolver

# Monitoring
set system static-host-mapping host-name zabbix.moscow.corp.internal inet 10.10.0.100
set system static-host-mapping host-name zabbix.moscow.corp.internal alias monitoring

commit
save
exit
```

### Конфигурация 2: Облачный edge router (Yandex Cloud)

```bash
configure

# Cloud hostname
set system host-name yc-edge-router-01
set system domain-name ru-central1-a.cloud.internal

# Yandex Cloud metadata
set system static-host-mapping host-name metadata.yandex.cloud inet 169.254.169.254
set system static-host-mapping host-name metadata.yandex.cloud alias metadata
set system static-host-mapping host-name metadata.yandex.cloud alias cloud-init

# Application infrastructure в Yandex Cloud
set system static-host-mapping host-name app-lb.ru-central1-a.cloud.internal inet 10.128.0.10
set system static-host-mapping host-name app-lb.ru-central1-a.cloud.internal alias loadbalancer
set system static-host-mapping host-name app-lb.ru-central1-a.cloud.internal alias lb

set system static-host-mapping host-name app-web-01.ru-central1-a.cloud.internal inet 10.128.0.20
set system static-host-mapping host-name app-web-01.ru-central1-a.cloud.internal alias web1

set system static-host-mapping host-name app-web-02.ru-central1-a.cloud.internal inet 10.128.0.21
set system static-host-mapping host-name app-web-02.ru-central1-a.cloud.internal alias web2

set system static-host-mapping host-name db-managed-postgres.ru-central1-a.cloud.internal inet 10.129.0.5
set system static-host-mapping host-name db-managed-postgres.ru-central1-a.cloud.internal alias database
set system static-host-mapping host-name db-managed-postgres.ru-central1-a.cloud.internal alias postgres

# Yandex Cloud DNS (внутренний)
set system name-server 192.168.0.2

commit
save
exit
```

### Конфигурация 3: VK Cloud multi-zone setup

```bash
configure

# VK Cloud hostname
set system host-name vkc-router-msk1-zone-a
set system domain-name msk1.vkcloud.internal

# VK Cloud infrastructure
set system static-host-mapping host-name infra.mail.ru inet 10.0.0.1
set system static-host-mapping host-name infra.mail.ru alias vk-infra

# Zone A servers
set system static-host-mapping host-name web-a1.msk1.vkcloud.internal inet 10.0.10.11
set system static-host-mapping host-name web-a2.msk1.vkcloud.internal inet 10.0.10.12

# Zone B servers (cross-zone communication)
set system static-host-mapping host-name web-b1.msk1.vkcloud.internal inet 10.1.10.11
set system static-host-mapping host-name web-b2.msk1.vkcloud.internal inet 10.1.10.12

# Managed services
set system static-host-mapping host-name db-managed.msk1.vkcloud.internal inet 10.0.20.5
set system static-host-mapping host-name db-managed.msk1.vkcloud.internal alias database

set system static-host-mapping host-name cache-managed.msk1.vkcloud.internal inet 10.0.20.15
set system static-host-mapping host-name cache-managed.msk1.vkcloud.internal alias redis

# Monitoring и Logging
set system static-host-mapping host-name mon.msk1.vkcloud.internal inet 10.0.30.10
set system static-host-mapping host-name mon.msk1.vkcloud.internal alias monitoring
set system static-host-mapping host-name mon.msk1.vkcloud.internal alias prometheus

set system static-host-mapping host-name log.msk1.vkcloud.internal inet 10.0.30.20
set system static-host-mapping host-name log.msk1.vkcloud.internal alias syslog

commit
save
exit
```

## Автоматизация и скрипты

### Скрипт массового добавления хостов

```bash
#!/bin/vbash
# add-static-hosts.sh
# Массовое добавление статических записей из CSV файла

source /opt/vyatta/etc/functions/script-template

# CSV формат: hostname,ip,alias1,alias2,alias3
# Пример: web01.local,10.0.10.11,www1,web1,frontend1

HOSTS_FILE="/config/static-hosts.csv"

configure

while IFS=',' read -r hostname ip alias1 alias2 alias3; do
    # Пропустить комментарии и пустые строки
    [[ "$hostname" =~ ^#.*$ ]] && continue
    [[ -z "$hostname" ]] && continue

    echo "Adding host: $hostname -> $ip"
    set system static-host-mapping host-name "$hostname" inet "$ip"

    if [ -n "$alias1" ]; then
        set system static-host-mapping host-name "$hostname" alias "$alias1"
    fi

    if [ -n "$alias2" ]; then
        set system static-host-mapping host-name "$hostname" alias "$alias2"
    fi

    if [ -n "$alias3" ]; then
        set system static-host-mapping host-name "$hostname" alias "$alias3"
    fi
done < "$HOSTS_FILE"

commit
save
exit

echo "Static hosts configuration completed!"
```

### Скрипт проверки консистентности

```bash
#!/bin/bash
# check-hostname-consistency.sh
# Проверка соответствия hostname между VyOS config и OS

VYOS_HOSTNAME=$(/opt/vyatta/bin/vyatta-op-cmd-wrapper show host name)
OS_HOSTNAME=$(hostname)
OS_FQDN=$(hostname -f)

echo "=== Hostname Consistency Check ==="
echo "VyOS Config Hostname: $VYOS_HOSTNAME"
echo "OS Hostname:          $OS_HOSTNAME"
echo "OS FQDN:              $OS_FQDN"
echo ""

if [ "$VYOS_HOSTNAME" = "$OS_HOSTNAME" ]; then
    echo "Status: OK - Hostnames match"
    exit 0
else
    echo "Status: WARNING - Hostname mismatch detected!"
    echo "Action required: Restart VyOS router or reconnect SSH session"
    exit 1
fi
```

### Скрипт экспорта конфигурации hostname

```bash
#!/bin/vbash
# export-hostname-config.sh
# Экспорт конфигурации hostname в JSON формат

source /opt/vyatta/etc/functions/script-template

OUTPUT_FILE="/config/hostname-export.json"

HOSTNAME=$(cli-shell-api showCfg system host-name)
DOMAIN=$(cli-shell-api showCfg system domain-name)

echo "{" > "$OUTPUT_FILE"
echo "  \"hostname\": \"$HOSTNAME\"," >> "$OUTPUT_FILE"
echo "  \"domain\": \"$DOMAIN\"," >> "$OUTPUT_FILE"
echo "  \"fqdn\": \"$HOSTNAME.$DOMAIN\"," >> "$OUTPUT_FILE"
echo "  \"static_hosts\": [" >> "$OUTPUT_FILE"

# Получить список static host mappings
# (требует парсинга вывода show configuration)

echo "  ]" >> "$OUTPUT_FILE"
echo "}" >> "$OUTPUT_FILE"

echo "Hostname configuration exported to $OUTPUT_FILE"
```

## Связанные документы

- [System Configuration](/docs/vyos/system/) - Общая конфигурация системы
- [Name Server (DNS)](/docs/vyos/system/vyos-name-server/) - Настройка DNS серверов
- [NTP](/docs/vyos/services/vyos-ntp/) - Настройка времени и NTP
- [Syslog](/docs/vyos/system/vyos-syslog/) - Настройка системного логирования
- [SNMP](/docs/vyos/services/vyos-snmp/) - Мониторинг через SNMP
- [Cloud-init](/docs/vyos/admin-guide/vyos-automation/) - Автоматизация в облаке

## Дополнительные ресурсы

- [RFC 1123 - Requirements for Internet Hosts](https://tools.ietf.org/html/rfc1123)
- [RFC 952 - DoD Internet Host Table Specification](https://tools.ietf.org/html/rfc952)
- [VyOS Documentation - System Host Name](https://docs.vyos.io/en/latest/configuration/system/host-name.html)
- [Yandex Cloud Metadata Service](https://cloud.yandex.ru/docs/compute/operations/vm-info/get-info)
- [VK Cloud Documentation](https://mcs.mail.ru/docs/)

## Заключение

Правильная настройка имени хоста, доменного имени и статических записей хостов является фундаментальной частью конфигурации VyOS. Эти параметры влияют на:

- Идентификацию устройства в сети
- Работу системных служб (syslog, SNMP, NTP)
- Интеграцию с облачными платформами
- Управляемость и мониторинг инфраструктуры

Следуйте рекомендациям из раздела "Лучшие практики" для обеспечения консистентной и надежной конфигурации.

