/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 добавляет интерфейс в мост при необходимости.
ln -s /etc/init.d/net.lo /etc/init.d/net.tap0Можно добавить его в автозагрузку:
rc-update add net.tap0 default
ssh-keygenВ результате будет файл
id_rsa и id_rsa.pub. Последний понадобится для сервера.
id_rsa.pub с клиента и добавляем в авторизованные ключи SSH:
cat id_rsa.pub >> ~/.ssh/authorized_keys
tunnel="0",command="/etc/init.d/net.tap0 restart"
/etc/ssh/sshd_config разрешаем туннели:
PermitTunnel yesИ перезапускаем sshd:
/etc/init.d/sshd restart
/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