Сделать локальные ресурсы доступными при подключении к Wireguard VPN

В обоих случаях происходит одно и то же :для непосредственного выполнения файла, должен быть установлен бит выполнения, а файловая система не может быть смонтирована noexec. Но это ничего не мешает читать эти файлы.

Когда скрипт bash запускается как ./hello_worldи файл не является исполняемым (либо нет бита разрешения на выполнение, либо нет exec в файловой системе ), строка #!даже не проверил , потому что система даже не загружает файл. Сценарий никогда не "выполняется" в соответствующем смысле.

В случае с bash./hello_worldопция файловой системы noexec просто не так хороша, как хотелось бы. Запущенная команда bash— это /bin/bash, а /binне находится в файловой системе с noexec. Так что заводится без проблем. Системе все равно, что bash (, или python, или perl, или что-то еще )является интерпретатором. Он просто запускает команду, которую вы дали (/bin/bash), с аргументом, который оказывается файлом. В случае bash или другой оболочки этот файл содержит список команд для выполнения, но теперь мы «прошли» все, что будет проверять биты выполнения файла. Этот чек не несет ответственности за то, что произойдет позже.

Рассмотрим этот случай:

$ cat hello_world | /bin/bash

… или для тех, кому не нравится бессмысленное использование кошек:

$ /bin/bash < hello_world

Последовательность "shbang" #!в начале файла — это всего лишь приятная магия, позволяющая эффективно делать то же самое, когда вы пытаетесь выполнить файл как команду. Вам может быть полезна эта статья LWN.net:Как запускаются программы .

0
12.03.2021, 09:28
1 ответ

Если вы хотите подключить отдельные внешние хосты к локальной сети через WireGuard, вам нужно сделать три ключевых вещи::

  1. Включите IP-блок локальной сети (или, по крайней мере, IP-адрес каждого отдельного узла локальной сети -, к которому вы хотите получить доступ ), в параметр AllowedIPsконфигурации WireGuard на каждом внешнем хозяин
  2. Настройте пересылку пакетов на хосте WireGuard со стороны локальной сети -(, напримерsysctl -w net.ipv4.ip_forward=1)
  3. Настройте маскировку пакетов (, также известную как SNAT ), на хосте WireGuard на стороне локальной сети -(, обычно выполняемом с помощью iptablesправил)

Полный пример этого здесь:

https://www.procustodibus.com/blog/2020/11/wireguard-point-to-site-config/

В этом примере подсеть локальной сети — 192.168.200.0/24, так что это значение AllowedIPsустановлено в конфигурации WireGuard внешнего хоста (Конечная точка A в примере):

AllowedIPs = 192.168.200.0/24

И в этом примере пересылка пакетов и маскировка выполняются путем добавления следующего в конфигурацию WireGuard на хосте WireGuard на стороне локальной сети -(Хост β в примере):

# IP forwarding
PreUp = sysctl -w net.ipv4.ip_forward=1
# IP masquerading
PreUp = iptables -t mangle -A PREROUTING -i wg0 -j MARK --set-mark 0x30
PreUp = iptables -t nat -A POSTROUTING ! -o wg0 -m mark --mark 0x30 -j MASQUERADE

Когда интерфейс WireGuard wg0включен на узле WireGuard со стороны локальной сети -, внешний узел может подключаться к любому узлу в локальной сети через свой локальный адрес --, в примере внешний узел (Конечная точка A )может подключаться к хосту LAN (конечной точке B )через локальный адрес конечной точки B 192.168.200.22.

0
18.03.2021, 22:25

Теги

Похожие вопросы