Перейти к содержимому

Основной конфиг

config.mgc — основной файл глобальной конфигурации Meshgate. Обычно он лежит рядом с бинарником Meshgate или в директории конфигурации, например /etc/meshgate/.

Meshgate читает config.mgc при старте. После изменения настроек обычно требуется перезапуск сервиса, чтобы новые значения применились.

Что обычно хранится в файле

Общие настройки: сертификаты, лицензирование, логирование, метрики, cluster, xdp, geoip и импорты через from.

Как лучше разносить конфиги

Общие параметры держите в config.mgc, а конфигурации серверов выносите в config.d/ и подключайте через from.

Один config.mgc должен содержать общие параметры (сертификаты, логирование, метрики), а конфигурации серверов лучше хранить в отдельных файлах внутри config.d/ и подключать через from.


Ниже приведена краткая справка по базовым элементам синтаксиса config.mgc, используемым в примерах на этой странице.

Переменные

  • Синтаксис: var name: value
  • Назначение: переиспользуемые значения
  • Пример: var certs: [cert: "path/to/cert.pem"]

Массивы

  • Синтаксис: []
  • Назначение: группировка настроек
  • Пример: log: [level: "info" rotation: "daily"]

Ключи

  • Синтаксис: key: value
  • Назначение: параметр и значение
  • Пример: address: "127.0.0.1"

Комментарии

  • Синтаксис: #
  • Назначение: игнорируются сервером
  • Пример: # тестовый сервер

var certs: [
cert: "assets/certs/localhost.pem"
key: "assets/certs/localhost-key.pem"
]
var internal_certs: [
cert: "path/to/internal/internal.pem"
key: "path/to/internal/internal-key.pem"
]

Поля

  • cert — путь к сертификату (.pem)
  • key — путь к приватному ключу (.pem)

Пути к файлам

Если указан относительный путь, он считается относительно директории, где расположен config.mgc (или рабочей директории запуска — зависит от способа запуска Meshgate).

Если сомневаешься — используй абсолютные пути.

Рекомендации

  • локально — самоподписанные сертификаты
  • production — Let’s Encrypt или другой доверенный CA
  • проверь права доступа к файлам перед запуском

license_key указывает лицензионный ключ для активации Meshgate.

license_key: "XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX"

Ключ приобретается у официального поставщика Meshgate.

Для Meshgate FREE ключ не требуется.


Блок log определяет, как записываются и хранятся логи.

log: [
rotation: "hourly"
runtime: [
layers: [
file: [
folder: "logs"
prefix: "meshgate_log"
]
opensearch: [
index_name: "runtime_logs"
address: "https://localhost:9200"
auth: [
login: "admin"
password: "adminpass"
]
]
clickhouse: [
address: "http://localhost:8123"
database: "test_db"
username: "default"
password: ""
]
stdout: [ ]
syslog: [ ]
]
]
access: [
layers: [
file: [
folder: "logs"
prefix: "meshgate_log"
]
opensearch: [
index_name: "access_logs"
address: "https://localhost:9200"
auth: [
login: "admin"
password: "adminpass"
]
]
clickhouse: [
address: "http://localhost:8123"
database: "test_db"
username: "default"
password: ""
]
stdout: [ ]
syslog: [ ]
]
]
]

Поля логгирования:

  • level Определяет уровень подробности логов. Значения: off, info (по умолчанию), debug, warn, error, trace

  • rotation Определяет частоту ротации файловых логов. Значения: minutely, hourly (по умолчанию), daily, never

  • enable_stdout Включает запись логов в stdout. Тип значения: true / false

  • runtime — системные (runtime) логи.

  • access — HTTP access-логи.

Локальная отладка

Используйте stdout вместе с level: "debug" для быстрого фидбэка в терминале.

Продакшн

Используйте file + ротацию, а при необходимости добавляй opensearch или clickhouse для централизованного хранения.


prometheus_config включает сервер экспорта метрик в формате Prometheus.

prometheus_config: [
address: "127.0.0.1"
port: 3000
path: "/metrics"
]

После запуска:

  1. Откройте http://{address}:{port}{path}.
  2. Убедитесь, что endpoint отвечает метриками.
  3. Проверьте, что Prometheus может достучаться до него из своей сети.

Метрики сгруппированы по назначению для упрощения навигации и чтения.

Базовые счётчики и gauges

  • total_requestsCounter (общее количество запросов)
  • total_connectionsGauge (активные соединения)
  • total_bansGauge (текущее количество банов)

Метрики fingerprint’ов

  • ja3GaugeVec {ja3}
  • ja3_sortedGaugeVec {ja3_sorted}
  • http2GaugeVec {http2}

Метрики кэша

  • cache_inserts_totalGaugeVec {cache_inserts_total}
  • cache_misses_totalGaugeVec {cache_misses_total}
  • cache_hits_totalGaugeVec {cache_hits_total}

Health-check и статус upstream

  • health_check_failedGaugeVec {upstream}
  • health_check_successGaugeVec {upstream}
  • upstream_statusGaugeVec {upstream}

HTTP-трафик и задержки

  • http_requests_totalCounterVec {hostname, status_code}
  • http_request_duration_secondsHistogram
  • upstream_request_duration_secondsHistogramVec {upstream}
  • bytes_received_totalCounterVec {host, upstream}

Доступно с версии PRO.

cluster: [
api: "127.0.0.1:50051"
meshgate_uuid: "ru_moscow_01"
challenge_url: "http://127.0.0.1:8080"
captcha_url: "http://127.0.0.1:8080"
]

xdp: [
interfaces: ["lo", "enp2s0"]
rules: [
block_with_pps: [
expr: "src.ip == 10.0.0.1 && src.port == 8080 && pps > 9"
action: "drop"
]
]
]

Поля выражений Layer4

Источник

  • src.ip (Ip) — IP источника
  • src.port (Int) — порт источника

Назначение

  • dst.ip (Ip) — IP назначения
  • dst.port (Int) — порт назначения

Нагрузка

  • pps (Int) — пакетов в секунду

geo_db_path — путь к базе MaxmindDB (geo2ip) для WAF.

geo_db_path: "/etc/meshgate/maxmindb_geo2ip.mmdb"

from импортирует конфигурационные файлы (поддерживаются относительные и абсолютные пути):

static: from "config.d/static.mgc"
https: from "config.d/https.mgc"
http: from "config.d/http.mgc"
tcp: from "config.d/tcp.mgc"
udp: from "config.d/udp.mgc"

Рекомендации по разбиению

  • один файл = один тип сервера или одна задача (https.mgc, static.mgc, tcp.mgc)
  • держи нейминг коротким и единым
  • начинай с минимального набора модулей и добавляй постепенно, чтобы проще отлаживать

var certs: [
cert: "assets/certs/localhost.pem"
key: "assets/certs/localhost-key.pem"
]
var internal_certs: [
cert: "path/to/internal/internal.pem"
key: "path/to/internal/internal-key.pem"
]
license_key: "XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX"
prometheus_config: [
address: "127.0.0.1"
port: 3000
path: "/metrics"
]
cluster: [
api: "127.0.0.1:50051"
meshgate_uuid: "ru_moscow_01"
challenge_url: "http://127.0.0.1:8080"
captcha_url: "http://127.0.0.1:8080"
]
xdp: [
interfaces: ["lo", "enp2s0"]
]
log: [
level: "debug"
rotation: "hourly"
enable_stdout: true
access: [
layers: [
file: [
folder: "logs"
prefix: "access"
]
opensearch: [
auth: [
basic: [
login: "admin"
password: $OPENSEARCH_INITIAL_ADMIN_PASSWORD
]
]
addr: "https://localhost:9200"
]
]
]
]
static: from "config.d/static.mgc"
#https: from "config.d/https.mgc"
#http: from "config.d/http.mgc"
#tcp: from "config.d/tcp.mgc"
#udp: from "config.d/udp.mgc"