устройство защиты от проводов не прослушивает порт после запуска

Я запускаю защиту от проводов с помощью этой команды:

wg-quick up wg0

это состояние защиты от проводов:

enter image description here

и с помощью этой команды, чтобы увидеть порт прослушивания:

lsof -i:7456

почему устройство защиты от проводов не прослушивает порт ? Конфигурация Wireguard прошла успешно?

1
задан 2 May 2020 в 17:11
1 ответ

Я предполагаю, что это делается в Linux, поскольку не указано иное и из-за контекста контейнера.

Описание lsof сообщает:

ОПИСАНИЕ

LSof ревизии 4.91 перечисляет в своем стандартном выходном файле информацию о файлах, открытых процессами для следующих диалектов UNIX:

  • Apple Darwin 9 и Mac OS X 10.[567]
  • FreeBSD 8.[234], 9.0 и 1[012].0 для систем на базе AMD64
  • Linux 2.1.72 и выше для систем на базе x86 системы
  • Solaris 9, 10 и 11

В Linux WireGuard — это не стандартный процесс, а сетевой драйвер, управляемый ядром. Даже если в конце концов это может создать поток ядра, появившийся в списке процессов, этот «процесс» будет особенным и не предоставит никакой доступной информации о его дескрипторах открытых файлов (если такая концепция в любом случае имеет смысл для потока ядра).

Поэтому lsof не может найти такую ​​информацию и всегда будет возвращать пустой результат.

Тем не менее, такая команда, как netstat -nul | grep -w 7456 или ss -nul sport = :7456 по-прежнему будет отображать его, где он был создан (см. . /proc/net/udp{,6} или netlink/sock_diag), чтобы узнать о прослушиваемых портах, а не ссылаться на информацию из ядра process API с помощью thsoe из сетевого API.

При этом это допустимо только в том случае, если команда wg-quick up wg0 была запущена в конкретном контейнере, после которого используется интерфейс.Если он был запущен на хосте, а после этого создание контейнера «украло» его, все ставки сняты. Это связано с тем, что WireGuard предназначен для работы с сетевыми пространствами имен (т. е. контейнерами). Вполне возможно, и задокументировано, создать интерфейс WireGuard в сетевом пространстве имен (например, в исходном пространстве имен хоста) и переместить его в другое сетевое пространство имен:

Ready for Containers

WireGuard отправляет и получает зашифрованные пакеты по сети пространство имен, в котором изначально был создан интерфейс WireGuard. Это означает, что вы можете создать интерфейс WireGuard в своем главном сетевое пространство имен, которое имеет доступ к Интернету, а затем переместите его в сетевое пространство имен, принадлежащее контейнеру Docker, как это единственный интерфейс контейнера. Это гарантирует, что единственно возможный путь этот контейнер может получить доступ к сети через безопасный зашифрованный туннель WireGuard.

Это означает, что если интерфейс перемещается, прослушивающий порт останется в предыдущем (возможно, первоначальном) сетевом пространстве имен хоста и будет невидимым в сетевом пространстве имен, куда поступает интерфейс. В таком случае порт прослушивания 7456/UDP не будет виден в контейнере, но будет находиться на хосте (или где бы он ни был изначально создан). Также обратите внимание, что WireGuard будет прослушивать (по-прежнему только в исходном сетевом пространстве имен), только если интерфейс активирован административно (ip link set wg0 up). При его отключении порт прослушивания временно удаляется.

2
ответ дан 2 May 2020 в 15:24