VPN-туннель средствами ssh: различия между версиями
Lazyklimm (обсуждение | вклад) м (категория) |
Lazyklimm (обсуждение | вклад) м (скрипт для автоконнекта) |
||
Строка 102: | Строка 102: | ||
ssh -o Tunnel=Ethernet -w7:8 user@server | ssh -o Tunnel=Ethernet -w7:8 user@server | ||
</source> | </source> | ||
в параметре -w указываем локальный:удалённый номер tap-интерфейса | |||
Если всё в порядке и работает, можно засунуть примерно такой скрипт в пользовательский cron: | |||
<source lang=bash> | |||
#!/bin/sh | |||
connect() | |||
{ | |||
srv=$1 | |||
ping -W 1 -c 3 -q -I tap7 192.168.0.1 2>/dev/null || | |||
ssh -NTCf -o ServerAliveInterval=10 -o Tunnel=Ethernet -w7:8 $srv | |||
} | |||
connect user@server | |||
</source> | |||
= См. также = | |||
* [http://manpages.ubuntu.com/interfaces.5.html man interfaces] | |||
* [http://manpages.ubuntu.com/ssh.1.html man ssh] | |||
* [http://manpages.ubuntu.com/ssh_config.5.html man ssh_config] | |||
= Минусы = | = Минусы = |
Версия 11:40, 24 января 2012
Задача
Есть сервер c локальной сетью, в которую бы мы хотели включить удалённую машину.
Можно поднять openvpn и прочие сервисы, но проще всего создать VPN средствами openssh.
На сервере есть бридж br0, в который "воткнуты" eth1 и wlan1, с адресом 192.168.0.1/24, при подключении клиент будет в этой сети иметь адрес 192.168.0.66.
Подготовка
Устанавливаем необходимые пакеты
клиент
apt-get install uml-utilities openssh-client
.
сервер
apt-get install uml-utilities openssh-server bridge-utils
Настройка
сервер
sshd
Разрешим туннелирование в конфиге /etc/ssh/sshd_config:
PermitTunnel yes
и перезапустим сервис
sudo invoke-rc.d ssh restart
interfaces
Чтобы каждый раз вручную не создавать интерфейсы, просто пропишем их в /etc/network/interfaces:
# ssh tunnel iface
auto tap8
iface tap8 inet manual
pre-up tunctl -u dk -t $IFACE
post-down tunctl -d $IFACE
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
# Параметром -u для tunctl следует указать пользователя, под которым будем логиниться на сервере
# bridge
auto br0
iface br0 inet static
address 192.168.0.1
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
bridge-stp off
bridge-ports eth1 wlan1 tap8
в bridge-ports указываются интерфейсы, которые будут объединены в бридж. Если бридж не нужен, tap-интерфейс можно настроить аналогично клиенту (см. ниже).
Поднимаем:
sudo ifup tap8 br0
(в дальнейшем они будут стартовать при загрузке системы)
клиент
interfaces
# ssh tunnel iface
auto tap7
iface tap7 inet static
pre-up tunctl -u user -t $IFACE
post-down tunctl -d $IFACE
address 192.168.0.66
netmask 255.255.255.0
Параметром -u для tunctl следует указать пользователя, от которого будет запускаться ssh с клиентской стороны.
Поднимаем:
sudo ifup tap7
Подключаемся
ssh -o Tunnel=Ethernet -w7:8 user@server
в параметре -w указываем локальный:удалённый номер tap-интерфейса
Если всё в порядке и работает, можно засунуть примерно такой скрипт в пользовательский cron:
#!/bin/sh
connect()
{
srv=$1
ping -W 1 -c 3 -q -I tap7 192.168.0.1 2>/dev/null ||
ssh -NTCf -o ServerAliveInterval=10 -o Tunnel=Ethernet -w7:8 $srv
}
connect user@server
См. также
Минусы
- Не цепляется адрес через dhcp
- Плохо работает http over ipv6 (настроен на сервере через туннельброкера)