Мой домашний компьютер подключается к Интернету через соединение OpenVPN. Тем не менее, я хотел бы иметь возможность подключиться к моему домашнему компьютеру снаружи через SSH. Ssh настроен и работает, но когда я подключаюсь к vpn, ssh доступен только из моей домашней сети.

Я понимаю, что что-то пошло не так, мой маршрутизатор перенаправляет входящие ssh-соединения на мой mac, но затем мой mac отвечает через vpn, так что время подключения истекает. У меня есть pf, настроенный для нескольких других вещей, но я не могу понять, как позволить ssh-ответам обходить vpn с помощью pf. Я сталкивался с другими решениями, которые используют IP-таблицы, таблицы маршрутизации и правила, но я не могу понять, как настроить это на Маверикс.

Я уже давно искал это, но не нашел работающего решения. Любая помощь будет принята с благодарностью!

Обновление: я добавлю (частично) мой текущий файл pf.conf для ясности, с добавленными правилами благодаря MariusMatutiae

#
# Macros
#
vpn_if = "tun0"
lan_if = "en0"
lan_gw = "x.x.x.x"
vpn_gw = "y.y.y.y"

#
# Ruleset
#
pass out on $lan_if route-to ($vpn_if $vpn_gw) from $vpn_if
pass out on $vpn_if route-to ($lan_if $lan_gw) from $lan_if

Обновление № 2: Вот некоторые из правил, которые я пытался заставить это работать (безрезультатно)

# Nat to make replies seem to come from my external ip address
nat on $lan_if -> $ext_ip

# Redirect incoming requests on the lan interface back to the lan interface
rdr pass on $lan_if from ! $lan to any -> ($lan_if)

# Make pf reply to lan interface 
pass in quick on $lan_if reply-to ($lan_if $lan_gw)

Я действительно надеюсь, что кто-то может мне помочь!

1 ответ1

0

Ваш диагноз верен: первоначальный контакт через домашний маршрутизатор, ответ через OpenVPN, ваш компьютер отбрасывает его по очевидным причинам безопасности.

То, что вы просите, называется Policy-based- или Source-based- . По сути, это означает наличие двух (или более) различных таблиц маршрутизации и переключение между ними в соответствии с некоторыми заранее определенными правилами. Он существует в Linux и существует во FreeBSD/OpenBSD благодаря PF, см. Эту статью в Википедии . Однако, хотя PF существует на Mac (см. Здесь инструкции по его настройке), я подумал, что смогу рассказать вам, как это сделать в PF, хотя, строго говоря, я сделал это только в OpenBSD (и Linux, конечно).

В основном, приведенная выше ссылка говорит вам, что у вас есть два варианта, где разместить правила для вашей PF. Что бы вы ни выбрали, добавьте эти правила в файл:

 ext_if1 = "ether"
 ext_if2 = "tun"
 ext_gw1 = "192.168.1.100"
 ext_gw2 = "10.0.0.3"
 pass out on $ext_if1 from $ext_if2 route-to ($ext_if2 $ext_gw2)
 pass out on $ext_if2 from $ext_if1 route-to ($ext_if1 $ext_gw1) 

Здесь * ext_if1 "- это ваше подключение к Ethernet через ваш маршрутизатор, а 192.168.1.100 - его IP-адрес, тогда как ext_if2 - это ваш виртуальный интерфейс (tun или tap, как угодно) с IP-адресом 10.0.0.3. Вы должны заменить соответствующие адреса в соответствии с вашими потребностями.

Кстати, это взято прямо из руководства пользователя PF здесь, за исключением того, что я упростил, чтобы удовлетворить ваш (более простой) запрос.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .