4

Мои настройки следующие: у меня есть доступ по ssh к удаленному компьютеру, на котором запущена последняя версия Ubuntu Server, и мне нужно запустить на нем программное обеспечение "через" HideMyAss VPN (поскольку IP-адрес этого компьютера должен быть подделан, когда программное обеспечение работает). Но, конечно, я хочу иметь возможность получать доступ к машине через ее "оригинальный" IP.

Моя проблема в том, что как только я запускаю скрипт hma-start на удаленной машине (который в основном получает файл конфигурации с их серверов и запускает openvpn с ним), я теряю соединение и больше не могу к нему подключиться.

Это вообще разрешимо, и если да, то как? Спасибо!

2 ответа2

3

Если вы хотите, чтобы ваше конкретное программное обеспечение использовало VPN-соединение, вы можете использовать сетевые пространства имен.

в основном, команда ip netns add vpn создаст другое пространство имен для сетевых устройств, таблиц маршрутизации, правил брандмауэра и так далее, так что это похоже на запуск двух сетевых стеков.

Сетевое устройство может находиться только в одном пространстве имен, поэтому вам потребуется виртуальное устройство, выполняющее роль моста между вашими двумя пространствами имен.

Это именно то, для чего предназначены виртуальные сетевые интерфейсы:

ip link add veth0 type veth peer name veth1

все, что идет в veth0, выйдет из veth1 и так далее. Теперь вам нужно только переместить один из виртуальных интерфейсов в другое пространство имен сети:

ip link set veth0 netns vpn

Теперь у вас есть ситуация, подобная этой топологии сети:

                   .----------.              .------.
[intertubes] ------|   Host   |--------------|  vpn |
               eth0`----------`veth1    veth0`------`

Вы можете применить любой способ, которым вы хотите поделиться интернет-соединением. Либо делайте маскарадинг (если vpn поддерживает обход NAT), маршрутизацию / мост (вам понадобится другой IP-адрес или серьезные конфигурации), либо любой другой метод, который вам нравится.

Если вы хотите получить доступ к vpn , запустите ip netns exec vpn bash и вы окажетесь в пространстве имен vpn . Вы увидите, что это пространство имен имеет только сетевой интерфейс veth0 , а также ненастроенный интерфейс lo который вы можете настроить с помощью ip addr add 127.0.0.1/8 dev lo && ip link set lo up . Теперь просто настройте интерфейс veth0 чтобы вы могли подключиться к Интернету, а затем запустите VPN, чтобы он мог перенастроить сеть для прохождения через VPN. Вы увидите, что основное пространство имен не будет использовать VPN, а пространство имен vpn .

0

Разрыв соединения, потому что VPN изменит маршрут по умолчанию, поэтому все идет в VPN. Вы можете изменить эту таблицу маршрутизации, но это может быть сложно сделать правильно, особенно если вы потеряете ssh-доступ, если что-то пойдет не так.

Одно простое решение - указать вашему серверу, чтобы он достиг вашего собственного IP-адреса через eth0, установив маршрут:

    ip route add your_ip_address via the_server's_gateway

и надеясь, что сценарий VPN не коснется его.

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

По сути, вам нужна политика маршрутизации. У вас будет две таблицы маршрутизации: одна будет использовать VPN, а другая не будет ее использовать.

Если сценарий VPN изменит только main таблицу, вы можете добавить другую таблицу маршрутизации, которая будет использоваться для исходного IP-адреса.

Таким образом, в основном, перед запуском VPN, вы дублируете main контент в другую таблицу, например table 2 (здесь 2 - произвольное число, смотрите /etc /iproute2 /rt_tables для определения псевдонима имени):

ip route add (network)/(prefixlen) dev eth0 src (address) table 2
ip route add default via (gateway) dev eth0 src (address) table 2

Теперь добавьте правило для использования этой таблицы, если к вашему серверу обращаются по его первоначальному IP-адресу из интерфейса eth0 :

ip rule add to (address) iif eth0 table 2

Затем вы запускаете свой VPN-скрипт.

Теоретически, вы должны запустить ip rule add перед добавлением маршрута по умолчанию во вторую таблицу, потому что в противном случае ядро отклонит это правило, заявив, что оно не может маршрутизировать к шлюзу. но в вашем случае он будет работать нормально, так как main уже может маршрутизировать к шлюзу.

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