Есть VPN-клиент, который доступен только под macOS и, соответственно, для ПК на macOS с двумя сетевыми картами. При подключении к VPN компьютеру даётся адрес из подсети 192.168.10.0/16 (если ничего не путаю, DNS — 192.168.10.10).
Нужно обеспечить доступ в эту сеть с другого компьютера (возможно, даже на Windows).
Изначально предполагал просто использовать системный шаринг интернета в macOS — выбрал для шаринга сетевой интерфейс VPN, запустил. Трафик идёт, но DNS и ресурсы внутри самой VPN-сети недоступны. Предполагаю, что это потому, что macOS создаёт NAT в диапазоне 192.168.0.0/16.
Затем решил попробовать Tailscale: поднял его на Mac рядом со вторым VPN-клиентом, сделал Mac exit-node, через терминал включил функцию передачи трафика между сетевыми интерфейсами в ядре и указал в Tailscale, что трафик должен идти в сеть 192.168.10.0/24 (у Tailscale своя сеть — 100.111.0.0/24, так что конфликтов, казалось бы, быть не должно… но они всё равно есть, вероятно, потому что оба устройства выходят в интернет через роутер).
В итоге пинг до адресов в сети 192.168.10.X идёт по 3 секунды — явный признак какого-то конфликта, и DNS тоже не работает, адреса из локальной сети недоступны.
В общем, моих знаний сетей категорически не хватает, чтобы понять, как организовать такой доступ. Если кто-то может подсказать — буду очень благодарен.
Это самопальное решение собранное из опенсоруса и такой-то матери в организации много лет назад)
Ну уже интересно - значит надо в сторону маркировки трафика смотреть что это такое))
Если у вас есть возможность описать чуть более подробную инструкцию для линукса - было бы здорово, может получилось бы её адаптировать.
Чтобы промаркировать трафик в Linux и отправить его через VPN-подключение, вам нужно выполнить несколько шагов. В этом примере мы будем использовать `iptables` для маркировки трафика и `iproute2` для маршрутизации. Предполагается, что у вас уже настроено VPN-соединение (например, OpenVPN).
### Шаг 1: Установите необходимые пакеты
Убедитесь, что у вас установлены `iptables` и `iproute2`. Обычно они предустановлены в большинстве дистрибутивов Linux. Вы можете установить их с помощью пакетного менеджера, если они отсутствуют.
### Шаг 2: Определите интерфейс VPN
Определите, какой интерфейс используется для вашего VPN-соединения. Вы можете использовать команду `ifconfig` или `ip a`, чтобы просмотреть список интерфейсов. Обычно интерфейс VPN будет иметь имя, например, `tun0` или `ppp0`.
### Шаг 3: Создайте правила iptables для маркировки трафика
Используйте `iptables` для маркировки трафика, который вы хотите отправить через VPN. Например, чтобы пометить весь исходящий трафик от определенного IP-адреса (например, `192.168.1.100`), выполните следующую команду:
```bash
sudo iptables -t mangle -A OUTPUT -s 192.168.1.100 -j MARK --set-mark 1
```
### Шаг 4: Настройте маршрутизацию для маркированного трафика
Теперь вам нужно настроить маршрутизацию для трафика с установленной меткой. Для этого создайте новую таблицу маршрутизации. Откройте файл `/etc/iproute2/rt_tables` и добавьте новую строку:
```
200 vpnroute
```
Теперь создайте маршрут для этой таблицы:
```bash
sudo ip rule add fwmark 1 table vpnroute
```
Затем добавьте маршрут в таблицу `vpnroute`, указывая интерфейс вашего VPN:
```bash
sudo ip route add default dev tun0 table vpnroute
```
### Шаг 5: Проверьте настройки
Убедитесь, что правила и маршруты настроены правильно. Вы можете использовать следующие команды для проверки:
```bash
sudo ip rule show
sudo ip route show table vpnroute
```
### Шаг 6: Тестирование
Теперь вы можете протестировать, что трафик от вашего источника (например, `192.168.1.100`) проходит через VPN. Вы можете использовать утилиты, такие как `traceroute` или `curl`, чтобы проверить, что ваш трафик идет через VPN.
### Примечание
- Убедитесь, что у вас есть права суперпользователя для выполнения этих команд.
- Если вы перезагрузите систему, вам может потребоваться повторно настроить правила и маршруты. Рассмотрите возможность добавления этих команд в скрипт и автоматизации их выполнения при загрузке.
Следуя этим шагам, вы сможете маркировать трафик в Linux и отправлять его через VPN-подключение.