Мне нужно настроить несколько wg-quick
интерфейсов на одной машине, оба из которых будут использовать реальный сетевой адаптер Ethernet напрямую, независимо.
Проблема, с которой я, похоже, сталкиваюсь, заключается в том, что через каждый из них я хочу получить доступ ко всему интернету, что, как я предполагаю, означает AllowedIPs = ::0
, но wg-quick
любит добавлять маршруты локально, так что весь трафик, идущий куда угодно, будет проходить через этот новый интерфейс; включая любые последующие wg-quick
попытки..
Есть ли способ позвонить wg-quick
и сказать ему: "Эй, нет, я бы хотел, чтобы ты использовал именно eno1
, а не 'шлюз по умолчанию'"? Возможно, используя raw wg
?
Я пробовал читать много информации в Интернете, но я все время путаюсь в том, о чем спрашивают другие, когда этокажетсякак и аналогичный вопрос, но оказывается, что речь идет о хостинге нескольких служб Wireguard или что-то в этом роде.
Ниже изображена основная суть с двумя интерфейсами wg. wg0
В этом случае выполняется обычная wg-quick
операция по краже всего трафика прозрачно, где wg1
есть доступный интерфейс, в котором я могу настроить приложения для взаимодействия с ним.
Я не против, если ваше решение будет wg0
вынуждено работать таким образом, я могу настроить SOCKS и HTTP-прокси для программного обеспечения, которое не поддерживает флаги «использовать этот интерфейс/IP для трафика», чтобы получить тот же эффект.
Home ║ ISP ║ Internet
║ ║
║ ║
┌─────────────┐ ║ ║
│ │ ║ ║
│ │ ║ ║ ┌───┐
│ │ ║ ║ ╔══╪
│ eno1│ ║ ║ ║ └───┘
│ wg0 ┐│ ╙────────────────╜ ║ VPN0
│ ┐ └─────────────┘ ║
│ ╞════════════════════════════════════════╝
│ ┘ ╔════════════════════════════════════╗
│ wg1 ║ ┌─────────────┐ ║
│ ╓ ║ ┘│ router ║ ┌───┐
│ ╠═══╝ │ ╓────────────────╖ ╚══╪
│ ╙ │ ║ ║ └───┘
│ │ ║ ║ VPN1
│ │ ║ ║
└─────────────┘ ║ ║
PC
"Почему?". Используя openVPN, мой провайдер разрешил открытые порты, по сути, локальный брандмауэр разрешал, я был публично маршрутизируемым и мог размещать сервисы на любом количестве портов, которое мне было нужно. Они перешли на wireguard, что здорово, но они поддерживают только один открытый порт на соединение wireguard. Так что, по сути, для каждого приложения, у которого был перенаправлен порт, я хочу развернуть для него интерфейс vpn.
Возможно ли это, используя только Wireguard, без iptables или чего-то еще (чего я вообще не понимаю)?
решение1
ДА. Хорошо. Так что решение на первый взгляд действительно так же просто, как и sudo ip route add $VPN1 via eno1
то, что позволит ему подключиться к VPN1 через eno1 независимо от того, существует ли wg0. Вам полностью разрешено иметь несколько ::0
интерфейсов wg вто же пространство именс одним из них по умолчанию (wg0), пока ваши приложения поддерживают привязку к интерфейсу для соединений (например netcat -s
). Предостережение в том, что только один такой туннель может быть порожден с помощью wg-quick
's Table=auto
.
ОДНАКО, последнюю неделю я боролся с целью, ради которой я вообще хотел это сделать: заставить интерфейсы рабочей группы передавать входящий трафик!
Я пробовал много вещей;
- наивно просто запускать
wg-quick
несколько раз с маршрутом/маршрутами на месте (это убивает все и пытаетсяwg-quick down
полностью сломать ваш сетевой стек) - как указано выше, раскручивая несколько раз, один с
Table=auto
, остальные сTable=off
- как указано выше, раскручивая несколько раз, один с
wg-quick
, остальные сwg
- раскручивание нескольких с
eno1
прячась заnamespace
(Мне даже не удалось заставить это работать для исходящего трафика...) - раскручивание нескольких скаждый
wg
по своемуnamespace
Но даже несмотря на то, что они работают [для исходящего трафика по соответствующим туннелям] (если не указано иное), все они отклоняют входящие соединения (тестирование с netcat -l -p $assignedPort
), независимо от того, ufw disable
используются ли те же или разные серверы для «VPN{0,1}».
Решение здесь в том, что янаконец-то вчера наткнулся. Волшебный соус wg-quick
делал с Table=auto
; FwMark.
То, чего я пытался избежать, изучая, как это сделать самому: «Возможно ли это с использованием только Wireguard?». Ну, вам действительно нужно, чтобы пакеты были помечены и связаны с таблицей, НО вам не нужно понимать/имитировать/перереализовывать то, что wg-quick
делает... по-видимому, вы можете простоиспользоватьэто.
Итак, после настройки туннеля по умолчанию для VPN0 с помощью wg-quick
вы берете FwMark и после настройки ip route
для VPN1повторно использовать этот FwMarkдля wg
. Это последнее соединение теперь проходит через eno1 (согласно маршруту), но разрешает входящие пакеты, пересылаемые из VPN1 (благодаря таблице, созданной туннелем VPN0).