Поделиться соединением VPN в Linux через Ethernet

Вопрос или проблема

Я хотел бы поделиться VPN-соединением на моем хосте Linux Mint с гостем, подключенным напрямую по Ethernet. Это, похоже, просто на Windows. Однако единственные методы, которые я видел на Linux, – это маскирование IP и/или прямое редактирование межсетевого экрана, что кажется опасным, подверженным ошибкам и трудным для отмены. Существует ли метод или сторонний инструмент, который работает аналогично тому, как это делает Windows?

Что я попробовал до сих пор:

  1. открыть инструмент “Расширенная настройка сети” (nm-connection-editor) и затем для Ethernet-соединения изменить метод IPV4 с Автоматический (DHCP) на Общий для других компьютеров
  2. использовать ifconfig на хосте, чтобы узнать IP-адрес шлюза для Ethernet-соединения (в моем случае это был 10.42.0.1)
  3. установить IP-адрес шлюза на госте на 10.42.0.1
  4. настроить устройство клиента на использование статического IP 10.42.0.100 (чтобы хосту не нужно было настраивать DHCP-сервер)

На данном этапе я могу SSH в устройство клиента через 10.42.0.100, что подтверждает наличие какого-то соединения. Однако, похоже, что у устройства клиента нет соединения с общедоступным интернетом.

Я нашел отличный подробный гид здесь, и оказалось, что я слишком усложнял задачу. Ответ заключался в том, чтобы просто установить клиент/гостя на автоматическое получение DHCP (вместо статического IP), и все остальное работало автоматически! Спасибо, Linux!

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

(Сначала я думал, что заставить DHCP работать будет сложно, после прочтения двух ответов на stackexchange здесь и здесь)

Обратите внимание, что в приведенном выше руководстве также описывается, как заставить это работать со статическим IP клиента, но, к сожалению, эти шаги не сработали для меня. Когда я пытался подключиться по SSH, я получал ошибки “нет маршрута к хосту”. В идеале я хотел бы статический IP, так как мой клиент – это Raspberry Pi, и я хотел безголовую настройку, но подключение внешнего монитора для получения IP клиента было небольшим компромиссом.

(Я думаю, что ранее упомянутый гид, связанный с редактированием межсетевых экранов, на самом деле в основном касался настройки “kill-switch” VPN. Но поскольку у моего хоста уже есть kill-switch VPN, мне на самом деле это не понадобилось. На самом деле, я думаю, что мог бы настроить статический IP 10.42.0.100, если бы просто включил IP переадресацию, но я не хотел больше мешать своей настройке)

Linux делает это очень просто, нет необходимости изобретать велосипед.

Если у вас есть сомнения, какие сетевые интерфейсы используются, вы можете выполнить команды ifconfig или ip addr в терминале Linux, чтобы увидеть список.

Этот скрипт создаст резервную копию исходной конфигурации, применит необходимые изменения, и предоставит меню для восстановления резервных копий при необходимости. Кроме того, он отобразит необходимые шаги конфигурации для клиентов.

В терминале Linux (на машине с VPN) добавьте следующий скрипт, используя редактор nano или vi.

Используя nano:

sudo nano vpn_connection_sharing.sh

Или используя vi:

sudo vi vpn_connection_sharing.sh

В vi нажмите i, чтобы войти в режим вставки, прежде чем вставить содержимое скрипта.

Скопируйте и вставьте следующее содержимое скрипта в редактор. ПАРОЛЬ установлен на “ChangeThis”, УБЕДИТЕСЬ, ЧТО ИЗМЕНИЛИ ЕГО!!!, вы также можете изменить SSID, по умолчанию он установлен на “VPN“:

#!/bin/bash

# Определение переменных
BACKUP_DIR="/etc/network-config-backups"
DATE=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="${BACKUP_DIR}/network-config-backup_${DATE}.tar.gz"
SSID="VPN"
PASSWORD="ChangeThis"  # Измените это на надежный пароль

# Создание резервной копии
create_backup() {
    echo "Создание резервной копии текущей конфигурации сети..."
    mkdir -p ${BACKUP_DIR}
    tar -czvf ${BACKUP_FILE} /etc/sysctl.conf /etc/iptables/rules.v4
    echo "Резервная копия создана в ${BACKUP_FILE}"
}

# Список и восстановление резервных копий
restore_backup() {
    echo "Доступные резервные копии:"
    select file in ${BACKUP_DIR}/*.tar.gz; do
        if [ -f "$file" ]; then
            echo "Восстановление резервной копии из $file..."
            tar -xzvf "$file" -C /
            echo "Резервная копия восстановлена из $file"
            break
        else
            echo "Неверный выбор. Попробуйте еще раз."
        fi
    done
}

# Включение IP переадресации
enable_ip_forwarding() {
    echo "Включение IP переадресации..."
    if ! grep -q '^net.ipv4.ip_forward=1' /etc/sysctl.conf; then
        echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
    else
        sudo sed -i 's/^#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
    fi
    sudo sysctl -p
    echo "IP переадресация включена."
}

# Настройка iptables
configure_iptables() {
    echo "Настройка iptables для NAT..."
    sudo iptables -t nat -A POSTROUTING -o ${VPN_INTERFACE} -j MASQUERADE
    sudo iptables -A FORWARD -i ${SHARED_INTERFACE} -o ${VPN_INTERFACE} -j ACCEPT
    sudo iptables -A FORWARD -i ${VPN_INTERFACE} -o ${SHARED_INTERFACE} -m state --state RELATED,ESTABLISHED -j ACCEPT
    sudo mkdir -p /etc/iptables
    sudo sh -c "iptables-save > /etc/iptables/rules.v4"
    echo "iptables настроен."
}

# Настройка Wi-Fi хотспота
setup_wifi_hotspot() {
    echo "Настройка Wi-Fi хотспота..."
    nmcli dev wifi hotspot ifname ${SHARED_INTERFACE} ssid ${SSID} password ${PASSWORD}
    echo "Wi-Fi хотспот настроен с SSID: ${SSID}"
}

# Отображение инструкций по конфигурации клиента
display_client_instructions() {
    echo "Инструкции по конфигурации клиента:"
    echo "1. Установите устройство клиента на автоматическое получение IP-адреса (через DHCP)."
    echo "2. Подключите устройство клиента к Wi-Fi сети с именем '${SSID}' с паролем '${PASSWORD}'."
    echo "Теперь устройство клиента должно иметь возможность подключаться к интернету через VPN хоста Linux."
}

# Выбор сетевых интерфейсов
select_interfaces() {
    interfaces=$(ip -o link show | awk -F': ' '{print $2}')
    
    echo "Выберите ваш VPN интерфейс (обычно Ethernet интерфейс):"
    PS3="Пожалуйста, выберите VPN интерфейс: "
    select vpn in ${interfaces}; do
        if [[ -n "$vpn" && $(iw dev $vpn info 2>/dev/null) == "" && $vpn != lo && $vpn != docker0 && $vpn != virbr0 ]]; then
            VPN_INTERFACE=$vpn
            echo "Выбранный VPN интерфейс: $VPN_INTERFACE"
            break
        else
            echo "Неверный выбор или не Ethernet интерфейс. Попробуйте еще раз."
        fi
    done

    echo "Выберите ваш Wi-Fi интерфейс:"
    PS3="Пожалуйста, выберите Wi-Fi интерфейс: "
    select shared in ${interfaces}; do
        if [[ -n "$shared" && $(iw dev $shared info 2>/dev/null) != "" ]]; then
            SHARED_INTERFACE=$shared
            echo "Выбранный Wi-Fi интерфейс: $SHARED_INTERFACE"
            break
        else
            echo "Неверный выбор или не Wi-Fi интерфейс. Попробуйте еще раз."
        fi
    done
}

# Основной скрипт
echo "Скрипт для обмена VPN-соединением"
PS3="Пожалуйста, выберите опцию: "
options=("Создать резервную копию и применить изменения" "Восстановить резервную копию" "Выход")
select opt in "${options[@]}"; do
    case $opt in
        "Создать резервную копию и применить изменения")
            create_backup
            select_interfaces
            enable_ip_forwarding
            configure_iptables
            setup_wifi_hotspot
            display_client_instructions
            break
            ;;
        "Восстановить резервную копию")
            restore_backup
            break
            ;;
        "Выход")
            break
            ;;
        *) echo "Неверная опция $REPLY";;
    esac
done

Сохраните файл и выйдите из редактора.

В nano:

  1. Нажмите Ctrl + O, чтобы сохранить.
  2. Нажмите Enter, чтобы подтвердить имя файла.
  3. Нажмите Ctrl + X, чтобы выйти.

В vi:

  1. Нажмите Esc, чтобы выйти из режима вставки.
  2. Введите :wq и нажмите Enter, чтобы сохранить и выйти.

Сделайте скрипт исполняемым:

chmod +x vpn_connection_sharing.sh

Запустите скрипт:

sudo ./vpn_connection_sharing.sh

Инструкции по конфигурации клиента:

  1. Установите устройство клиента на автоматическое получение IP-адреса (через DHCP).
  2. Подключите устройство клиента к хосту Linux через Ethernet или Wi-Fi (VPN).

Устройства клиентов теперь должны иметь возможность подключаться к интернету через VPN хоста Linux. Вот и все!

Наслаждайтесь!

Ответ или решение

Поделитесь VPN-соединением на Linux через Ethernet: Полное руководство

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

1. Предварительные условия

Перед началом настройки убедитесь, что на хосте Linux Mint настроен VPN-клиент и он исправно работает. Проверьте активное состояние VPN-соединения и возможность доступа к интернету.

2. Подключение устройства через Ethernet

Для этого вы можете:

  1. Подключите гостевое устройство к вашему хосту через Ethernet-кабель.
  2. Убедитесь, что у вам выделены все необходимые интерфейсы для сетевых соединений. Для этого используйте команды ifconfig или ip addr в терминале.

3. Настройка Ethernet-соединения на хосте

  1. Открыть инструменты настройки сети:
    Введите в терминале nm-connection-editor для доступа к инструментам управления сетями.

  2. Изменение конфигураций Ethernet:
    Найдите ваше Ethernet-соединение и измените метод IPv4 на "Shared to other computers". Это позволит вашему хосту выступать в роли маршрутизатора для гостевого устройства.

  3. Проверка адреса шлюза:
    Исходя из текущих настроек, ваш хост будет иметь адрес шлюза (например, 10.42.0.1).

  4. Настройка гостевого устройства:
    Установите на гостевом устройстве настройку получения IP-адреса автоматически через DHCP. При этом ваше устройство должно автоматически получать настройки из DHCP сервера, созданного на хосте.

4. Проверка связи

Для проверки соединения выполните следующую процедуру:

  • Попробуйте пинговать адрес хоста с гостевого устройства:
    ping 10.42.0.1
  • Если соединение работает, вы увидите ответ. Далее проверьте доступ в интернет (например, с помощью ping google.com).

5. Скрипт для автоматизации настройки

Можно использовать следующий скрипт для автоматизации настройки, минимизируя возможность ошибок:

#!/bin/bash
# Назначение: Автоматизация настройки共享
# Функция: создание резервной копии, включение IP-адресации, настройка iptables

# Определение переменных
ADDRESS="10.42.0.1"
SHARED_INTERFACE="eth0" # Замените на ваше Ethernet устройство
VPN_INTERFACE="tun0" # Замените на ваше VPN устройство

# Включение маршрутизации IP
echo "Включаем маршрутизацию IP..."
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# Настройка iptables для NAT
echo "Настраиваем iptables для NAT..."
sudo iptables -t nat -A POSTROUTING -o ${VPN_INTERFACE} -j MASQUERADE
sudo iptables -A FORWARD -i ${SHARED_INTERFACE} -o ${VPN_INTERFACE} -j ACCEPT
sudo iptables -A FORWARD -i ${VPN_INTERFACE} -o ${SHARED_INTERFACE} -m state --state RELATED,ESTABLISHED -j ACCEPT

6. Запуск скрипта

Сохраните скрипт в файл, сделайте его исполняемым и выполните:

chmod +x vpn_connection_sharing.sh
sudo ./vpn_connection_sharing.sh

Заключение

Используя методы, описанные выше, вы сможете настроить совместное использование VPN-соединения через Ethernet на вашем компьютере с Linux Mint. Это позволит оснастить ваши устройства безопасным интернет-доступом через VPN. Важно помнить, что использование DHCP гораздо проще и удобнее для большинства пользователей, чем настройка статических IP-адресов.

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

Дополнительно: Настоятельно рекомендуется сохранять резервные копии конфигураций перед внесением изменений, чтобы в будущем избежать проблем и ошибок.

Оцените материал
Добавить комментарий

Капча загружается...