Прямая ссылка
Текстовая версия здесь
Копия
Это заметка от моего собственного склероза, потому что мелочи иногда забываю.
Для общей информации, что такое этот самый сетевой неймспейс. Это такая хитрая фиговина в ядре Linux, которая позволяет на одной машине с одной сетевой картой соединяться с сетью, будто у вас вагон и маленькая тележка этих сетевых карт (соответственно, куча локальных IP), можно, например, на одном неймспейсе поднять VPN до одного провайдера, на втором — до второго, на третьем — коннектиться к основному, и т.д.
Network namespace — это логически отделенный от других стек сетевых протоколов в Linux. Такая себе контейнерная виртуализация для сетевых интервейсов, когда chroot LXC и нужна виртуализация только сетевых интерфейсов. Эмулируется полностью сетевой стек: сетевые интерфейсы, таблица маршрутизации, файрволл и т.д. Так, как это работает на уровне ядра и для определенных процессов, то вполне можно получить рабочую конфигурации, когда на одной машине есть несколько сетевых интерфейсов с одинаковыми IP-адресами и ничто не конфликтует.
Хочу по этим штуковинам написать большой материал, как мы их у себя сконфигурировали и развели с одного сервера целый пул доступа к разным VPN-провайдерам, но руки не доходят. Поэтому да, заметка от склероза.
Каждому из нэймспейсов можно подсунуть свою конфигурацию сети, свои конфигурационные файлы (resolv.conf
, hosts
)
Для этого достаточно положить соответствующие файлы в директорию /etc/netns/имя_namespace
, например, для гипотетического namespace с именем riseupvpnns
это будет каталог /etc/netns/riseupvpnns
, туда можно положить, например, resolv.conf
, прописать необходимые DNS, и эта конфигурация будет влиять только на данный namespace, в независимости, что там в основной системе прописано.
Оказывается, вплоть до версии .NET 4 в перечислении Environment.SpecialFolder
нет пути к папке, куда установлена Windows (обычно C:\Windows
). Эту досадную оплошность можно обойти двумя способами:
1. Посмотреть в переменную окружения SystemRoot
или windir
:
string windir=Environment.GetEnvironmentVariable("SystemRoot");
string windir=Environment.GetEnvironmentVariable("windir");
2. ВНЕЗАПНО, бывают хитрые самосборные или специальные дистрибутивы, где данных переменных окружения нет. Тогда:
— надо взять путь к директории system
, (обычно это C:\Windows\System32
), который есть в Environment.SpecialFolder
во всех версиях .NET: Environment.SpecialFolder.System
— получить директорию выше уровнем:
string windir = System.IO.Directory.GetParent( Environment.GetFolderPath(Environment.SpecialFolder.System));
Слава Украине!
SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. Часть I — инициализация (и введение)
-Преамбула
-Общая структура БД
-Заголовок базы данных
-Дополнительные перечисления и мелкая корректировка с придирками.
-Поля, свойства и конструктор класса
-Функции для чтения БД
-Функции для чтения заголовка
-Закрытие базы данных
-Открытие базы данных, чтение и проверка заголовка, чтение индексов.
SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Часть II. Поиск.
-Трехбайтовые числа
-Байтовый substr
-Поиск ID или смещения в «Диапазонах IP»
-Функция поиска в «Диапазонах» (SearchDB)
SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Часть III. Универсальный формат упаковки данных и получение данных из справочников.
-Приведение типов
-Анализ (распаковка) записи
-Обработка полей записи
-Дополнительные функции
SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Часть IV. Получение данных.
-Чтение информации из справочников
-Поиск в справочнике по ID
-Очистка ответа
-Функция, формирующая финальный ответ.
SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Приложение
-Дополнительно
-Источники
-Код на GitHub
-Создатели