Принудительно транслировать IPv4 UDP на всех сетевых интерфейсах в Windows 7 и более поздних версиях.
Загрузите последнюю версию.
Если вы работаете с Windows, вас может удивить, что широковещательные пакеты IPv4 UDP, отправленные на глобальный широковещательный адрес 255.255.255.255
(все доступные сетевые интерфейсы), на самом деле не будут доставлены на все доступные сетевые интерфейсы, присутствующие на система.
Это связано с тем, что сетевая реализация сокетов BSD в Windows считает, что такие пакеты могут быть доставлены только на интерфейс с наивысшим приоритетом («по умолчанию»). Приоритет сетевого интерфейса определяется значением его метрики, которое (обычно) автоматически назначается системой. Интерфейс с наименьшим значением метрики будет интерфейсом с наивысшим приоритетом. Обычно это интерфейс, через который ваш компьютер подключен к Интернету (или к домашнему маршрутизатору). Вы можете проверить значения метрик, назначенные Windows всем сетевым интерфейсам, выполнив эту команду в PowerShell:
Get-NetIPInterface
Какова бы ни была причина такого поведения, оно имеет серьезные последствия: все остальные сетевые интерфейсы не будут получать глобальные широковещательные пакеты UDP, а определенное приложение будет испытывать проблемы с подключением, если оно будет зависеть от правильной доставки таких пакетов.
Какое это имеет значение? Рассмотрим компьютер, подключенный к локальной сети со стандартной подсетью 192.168.179.0/24 и VPN с подсетью 100.100.100.0/24. Теперь на этом компьютере работает служба, к которой также должны иметь доступ VPN-клиенты, и эта служба для связи использует глобальные широковещательные пакеты UDP.
Естественно, единственный способ решить эту проблему в Windows — соединить обе сети. Но мостовое соединение крайне нежелательно, поскольку в этом случае вся ваша локальная сеть будет доступна стороне, подключенной через VPN.
BROADcast прекрасно решает эту проблему, перехватывая глобальные широковещательные пакеты UDP, доставленные по основному маршруту (также называемому «предпочтительным» маршрутом), и просто ретранслируя их на все другие подходящие сетевые интерфейсы, которые Windows решила просто пропустить.
На снимке экрана выше BROADcast захватывает глобальные широковещательные пакеты UDP, доставленные на реальный адрес локальной сети 10.10.10.100
(который также является предпочтительным маршрутом), и ретранслирует их на VPN-адрес 100.100.100.1
. Без запуска BROADcast пакеты оставались бы доставленными только на 10.10.10.100
, полностью игнорируя VPN-сегмент сети.
Примеры программного обеспечения, которое жизненно зависит от этой функциональности, включают: приложения для чата в локальной сети, некоторые многопользовательские видеоигры и другие децентрализованные приложения, используемые для совместной работы.
Примечание. Для запуска BROADcast требуются права администратора. Это связано с тем, что ему приходится перехватывать UDP-пакеты с использованием необработанных сокетов, а это разрешено только для учетных записей с повышенными правами.
BROADcast — консольное приложение. Он также может работать в фоновом режиме как служба Windows.
Начните ретрансляцию глобальных широковещательных пакетов UDP:
broadcast.exe -b
Добавьте -d
для отображения подробных диагностических сообщений (полезно при устранении неполадок):
broadcast.exe -b -d
Широковещательные пакеты будут доставляться на все сетевые интерфейсы, кроме интерфейса по умолчанию. Используйте Ctrl+C для выхода из BROADcast.
В качестве бонусной функции BROADcast позволяет сделать любой интерфейс интерфейсом по умолчанию (или предпочтительным). Он делает это, беря текущее значение метрики интерфейса, который вы хотите превратить в значение по умолчанию, и добавляя его к каждому значению метрики интерфейса, что делает его самым низким значением метрики из всех:
BROADcast.exe -i " Interface " -m
Запустите команду еще раз без аргумента -m
, чтобы отменить все изменения значений метрик и восстановить автоматические значения, управляемые системой:
BROADcast.exe -i " Interface "
«Интерфейс» — это имя сетевого интерфейса, которое можно найти (и изменить) в разделе «Центр управления сетями и общим доступом» панели управления Windows. Вы можете получить к нему быстрый доступ, нажав Win+R и открыв:
%windir%explorer.exe shell:::{992CFFA0-F557-101A-88EC-00DD010CCC48}
Чтобы установить (или удалить) BROADcast как службу Windows, вызовите ее с соответствующим аргументом:
broadcast .exe [install | uninstall]
Репозиторий BROADcast содержит пример конфигурации OpenVPN и сценарии для запуска BROADcast после запуска сервера OpenVPN с помощью устройства TAP.
Обратите внимание: если вы собираетесь запустить BROADcast из OpenVPN, используя функцию запуска/остановки сценария, вам также необходимо запустить OpenVPN с правами администратора, как и BROADcast.
По этой причине настоятельно рекомендуется запускать BROADcast отдельно как службу Windows.
Хотя это и не связано напрямую с BROADcast или UDP-трансляцией, еще одним полезным сетевым костылем Windows является ForceBindIP.
В отличие от BROADcast, который обеспечивает исправление для протокола UDP, ForceBindIP предоставляет аналогичное исправление для протокола TCP, заставляя приложение привязываться (или прослушивать) определенный сетевой интерфейс вместо того, который оно автоматически выбирает (который часто не тот, который вы выбираете). хотеть).
Создание качественного программного обеспечения — это сложно и отнимает много времени. Если BROADcast окажется для вас полезным, вы можете купить мне ☕!