Следующая ситуация.
Один из моих домашних серверов работает на сервере 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).