Настройка клиента

  1. Правим /etc/conf.d/net:
    config_tap0="192.168.1.2/24"
    
    preup() {
        case ${IFACE} in
            tap0)
                ssh -o Tunnel=ethernet -S /var/run/ssh-vpn-ctrl -M -f -w 0 volvo true
                sleep 5
                ;;
        esac
        return 0
    }
    
    postup() {
        case ${IFACE} in
            tap0)
                brctl addif br0 tap0
                ;;
        esac
        return 0
    }
    
    postdown() {
        case ${IFACE} in
            tap0)
                # когда vpn не нужен, закрываем ssh
                ssh -S /var/run/ssh-vpn-ctrl -2 volvo
                ps aux | grep "/var/run/ssh-vpn-ctrl" | grep -v grep | awk -F " " '{print $2}' | xargs kill
                ;;
        esac
        return 0
    }
    Здесь volvo — имя сервера, -w 0 — указание на tap0, /var/run/ssh-vpn-ctrl — сокет для создания туннеля. Строка в postup добавляет интерфейс в мост при необходимости.
  2. Готовим сервис для создания подключения:
    ln -s /etc/init.d/net.lo /etc/init.d/net.tap0
    Можно добавить его в автозагрузку:
    rc-update add net.tap0 default
  3. Готовим ключ для входа на сервер по SSH:
    ssh-keygen
    В результате будет файл id_rsa и id_rsa.pub. Последний понадобится для сервера.

Настройка сервера

  1. Берем файл id_rsa.pub с клиента и добавляем в авторизованные ключи SSH:
    cat id_rsa.pub >> ~/.ssh/authorized_keys
  2. Дописываем в начало строки с ключом:
    tunnel="0",command="/etc/init.d/net.tap0 restart"
  3. В конфиге SSH /etc/ssh/sshd_config разрешаем туннели:
    PermitTunnel yes
    И перезапускаем sshd:
    /etc/init.d/sshd restart
  4. Правим /etc/conf.d/net на сервере:
    config_tap0=( "192.168.1.1/24" )
    routes_tap0=(
            "192.168.1.0/24 via 192.168.1.1"
    )
    
    preup() {
        echo `date`: postup ${IFACE} >> /var/log/postup
        case ${IFACE} in
            tap0)
                ip link set up dev tap0
                brctl addif br0 tap0
                ;;
        esac
        return 0
    }

Для поднятия туннеля на клиенте используем команду:

/etc/init.d/net.tap0 start