Следующая ситуация.

Один из моих домашних серверов работает на сервере OpenVPN, а также на сервере OpenSSH (и некоторых других вещах), оба из которых доступны удаленно.

Когда меня нет дома, я обычно подключаюсь к указанному серверу через VPN и открываю несколько сеансов SSH через публичный ip указанного сервера.

Я хочу подключить мой домашний сервер к внешнему VPN, чтобы весь (исходящий) трафик, проходящий через мой сервер, также проходил через внешний VPN.

|MobilePhone|---VPN ----|
                        |
|Other Dev|-----SSH ----|----VPN---->| Homeserver | --- VPN ---> | External Provider |
                        |               ^
|Laptop|--SSH/NFS/VPN---|               |
                                        |
                                        |
|Laptop|--------SSH---------------------|

Я все еще хочу иметь возможность SSH на мой сервер через (бывший) публичный IP. Мой маршрутизатор по-прежнему напрямую подключен к моему провайдеру, поэтому любой входящий трафик должен перенаправляться прямо на сервер, поэтому я считаю, что это возможно.

Я наивный, подумал я, это может сработать, если я подключу свой сервер к внешнему VPN через tun1 (сервер использует tun0), и я готов к работе. Конфигурация клиента внешнего VPN имеет nobind set, поэтому на портах не должно быть никаких конфликтов.

Я все еще мог видеть вывод соединения openvpn. Однако вскоре после этого все мои соединения оборвались.

* Теперь я не могу ни подключиться к VPN, ни подключиться к ней по SSH. Также Apache больше не доступен. Я думаю, что ничего не будет

Мой маршрутизатор все еще отвечает на эхо-запросы на своем общедоступном IP-адресе.

Я предполагаю, что подключение к VPN заняло сетевой интерфейс моих серверов или что-то в этом направлении. Так что это должно быть проблемой маршрутизации.

Но я не уверен, что именно там происходит и какие вещи мне придется изменить, чтобы это работало.

Я хотел бы понять, почему это не работает так, как я это пробовал.

Что мне нужно узнать, чтобы правильно настроить такой сценарий?

Примечания:

  • Я думал о возвращении пакетов. Но я думал, что смогу как-то настроить маршрут так, чтобы все пакеты, поступающие от внутреннего ip моего маршрутизатора, были отправлены обратно на маршрутизатор, а не через VPN?
  • Что-то вроде ip route add 192.168.0.0/24 via 192.168.0.1 dev eth1?

Обновить

Мне удалось продвинуться дальше, добавив следующие строки в /etc/network/interfaces

up ip rule add from 192.168.0.0/24 table 128 || true
up ip route add table 128 to 192.168.0.0/24 dev eth0 || true
up ip route add table 128 default via 192.168.178.1 || true

Это позволило мне получить доступ к apache и SSH на мой сервер через его исходный публичный IP-адрес, даже если сервер подключен к внешней VPN.

Я предполагаю, что это соответствует тому, что я имел в виду, любые пакеты, исходящие из моей локальной сети или маршрутизатора, маршрутизируются через eth0, используя мой маршрутизатор в качестве шлюза по умолчанию, вместо адаптера tun1 внешнего VPN.

Все идет нормально.

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что, когда мой ноутбук подключен к серверу OpenVPN, работающему на моем домашнем сервере, время ожидания каждого соединения истекает.

Я думаю, что проблема похожа на исходную проблему. Пакеты, отправленные с моего ноутбука, подключенного через VPN (172.16.0.10), не маршрутизируются обратно на ноутбук, поскольку возвращаемые пакеты будут отправляться через шлюз по умолчанию, то есть внешний VPN, к которому подключен мой сервер.

Я возился с таблицей маршрутизации, пытаясь маршрутизировать что-либо, идущее с 172.16.0.0 обратно на 172.16.0.xx через tun0 . В конце концов я облажался с таблицей маршрутизации, и теперь любой запрос истекает, когда мой ноутбук подключен к VPN-серверам, независимо от того, подключен ли мой сервер к внешней VPN или нет.

Я сбросил таблицу маршрутизации и перезагрузил сервер, надеясь исправить хотя бы это снова.

Я не уверен, может ли быть проблема в том, что мой ноутбук также подключен к моей локальной сети (192.168.178.xx).

1 ответ1

1

Ваша проблема в том , что пакеты , посланные ноутбука получить разослал по ссылке VPN от HomeServer , используя свой исходный адрес источника (т.е. интерфейса tun ноутбука, скорее всего). Эти пакеты должны быть сброшены вашим провайдером VPN, но даже если это не так, ответные пакеты не попадут на ваш ноутбук.

Решение заключается в том, чтобы ответные пакеты также проходили через ваш домашний сервер; для этого они должны выглядеть как ответы, отправленные на ваш домашний сервер. Поэтому вам нужно переписать адрес источника в пакетах, выходящих из интерфейса tun1 домашних серверов, в IP этого интерфейса, используя, например,

iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE

Используя tcpdump -nlvvv -i tun1 вы можете проверить, что команда iptables сделала с вашим исходящим трафиком. Если бы вы сначала использовали tcpdump для просмотра трафика, вы, вероятно, сразу бы поняли, что не так. :)

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