Несколько интерфейсов Wireguard, каждый из которых использует «реальный» интерфейс напрямую, и через любой из них можно достичь любого IP-адреса

Несколько интерфейсов Wireguard, каждый из которых использует «реальный» интерфейс напрямую, и через любой из них можно достичь любого IP-адреса

Мне нужно настроить несколько 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).

Связанный контент