У меня есть Linux-машина в интрасети, к которой я могу получить доступ только через SSH, этот компьютер должен подключиться к VPN с помощью openconnect, однако, когда я это сделаю, я отключаюсь от SSH, поскольку IP-адрес интрасети больше не действителен.
Я могу повторно подключиться к нему изнутри VPN, используя назначенный IP-адрес, но этот IP-адрес меняется каждый раз, когда подключается VPN, у меня нет контроля над другими сетями, только на этом компьютере.
есть ли способ сохранить соединение SSH при подключении к VPN? Спасибо.
openconnect требует аргумент --script, который принимает сценарий для настройки маршрутизации, без него соединение будет успешным, но имена не будут разрешены, а IP-адрес интрасети останется действительным.
В настоящее время я использую Ubuntu по умолчанию / etc / vpnc / vpnc-script (вставлен сюдаЯ хорошо разбираюсь в сценариях оболочки, но я очень мало знаю о сети, и если мне придется что-то изменить, мне понадобится справка о том, что и как это изменить.
есть ли способ сохранить соединение SSH при подключении к VPN?
Нет. Маршрутизация этой системы резко меняется, когда вы подключаетесь к VPN, которая ломает все установленные сокеты TCP.
Вы должны изучить использование терминального мультиплексора, например экран или tmux в вашем сеансе ssh - таким образом у вас будет постоянная оболочка, к которой вы можете повторно подключиться.
Вы должны использовать --script
и --script-tun
варианты openconnect
и предоставить обычай vpnc-скрипт. Хорошей отправной точкой является vpnc-script
распространяется уже с вашим openconnect
, Например, на OSX (HomeBrewed openconnect
) он расположен по адресу /usr/local/etc/vpnc-script
.
Обратите внимание, что согласно официальной документации openconnect:
OpenConnect просто обрабатывает связь с сервером VPN; Это не знать, как настроить сетевую маршрутизацию и службу имен во всех различных операционных системах, в которых она работает.
Чтобы настроить службу маршрутизации и имен, он использует внешний сценарий, который обычно называется vpnc-script.
Уже есть хороший проект под названием ocproxy который действует как прокси-сервер для openconnect
, отсюда и название ocproxy (ОручкаConnectПрокси).
ocproxy - это SOCKS уровня пользователя и прокси-сервер переадресации портов для OpenConnect на основе lwIP. При использовании ocproxy OpenConnect обрабатывает только сетевую активность, которую пользователь специально запрашивает у прокси, поэтому интерфейс VPN больше не «захватывает» весь сетевой трафик на хосте.
echo $1 | sudo openconnect -u $2 -d --timestamp -v --passwd-on-stdin --script-tun --script "ocproxy -D $3 -v" $4
Заменить:
$1
с: Пароль OpenConnect$2
с: Имя пользователя OpenConnect$3
с: Требуемый порт прокси Socks5$4
с: Адрес сервера OpenConnectВы можете посмотреть, что находится в iptables
, который обрабатывает фильтрацию пакетов в ядре. я использую openconnect
с другого направления, и настройка по умолчанию - удалить доступ к стандартным интерфейсам в пользу вновь созданного интерфейса VPN. Первое, что нужно сделать, это выяснить, какие маршруты создает VPN-соединение. Затем вы можете написать сценарий для обработки шлюза и маршрутов, а затем, наконец, сбросить iptables
и очистить "цепочку" VPN (термин, используемый в iptables
). У меня есть сценарий, который выглядит примерно так:
IPADDR=NN.NN.NN.N
DESIREDNET1=MM.MM.MM.MM
GATEWAY_LINE=$(netstat -rn | grep ${IPADDR})
GATEWAY=$(echo "$GATEWAY_LINE" | awk '{print $2}')
GATEWAY_DEV=gw
if [ "$GATEWAY" = "*" ]; then
GATEWAY=$(echo "$GATEWAY_LINE" | awk '{print $8}')
GATEWAY_DEV=''
fi
# add custom routes
route add -net $DESIREDNET1 netmask 255.255.0.0 dev cscotun0
...
# reset the default route
route del default
route add default $GATEWAY_DEV $GATEWAY
# flush iptables to clear the ciscovpn chain
iptables --flush
iptables --delete-chain
# Add out own nameservers back
if [ -f /etc/resolv.conf.vpnbackup ]
then
cat /etc/resolf.conf /etc/resolv.conf.vpnbackup > /etc/resolv.conf
echo "nameserver $GATEWAY" >> /etc/resolv.conf
fi
Вам нужно будет скопировать /etc/resolv.conf
к /etc/resolf.conf
при отключенном VPN, чтобы иметь возможность вернуть «нормальные» настройки.
Удачи.
Я думаю, причина в том, что когда ваш Linux-сервер устанавливает VPN-соединение, он направляет весь трафик через шлюз в удаленной сети. Вы можете оживить свой SSH, если настроите свой VPN-клиент только на использование удаленного шлюза для связи с удаленной сетью.
Я не использую openconnect, но в openvpn можно поставить галочку use this connection only for resources on its network
в конфигурации VPN.
Временное решение этой проблемы заключается в подключении к одному и тому же серверу VPN на обеих машинах, участвующих в терминальном соединении.
Меня устраивает.
Если вы, например, используете VPS и можете создать мини-VPS в том же центре обработки данных, а также предоставить локальный IP-адрес в каждом из двух VPS, вы можете создать туннелированное соединение SSH, используя мини-VPS в качестве туннеля. Таким образом, вы можете подключиться к целевому VPS, даже если он подключен к VPN.
Для удаленного подключения по SSH:
Итак, предпосылки для этого:
Это легко и возможно в популярных облаках, таких как DigitalOcean, Linode и т. Д.