VPN-туннель средствами ssh: различия между версиями
Lazyklimm (обсуждение | вклад) м (категория) |
Lazyklimm (обсуждение | вклад) м |
||
(не показано 5 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
= Задача = | == Задача == | ||
Есть сервер c локальной сетью, в которую бы мы хотели включить удалённую машину. | Есть сервер c локальной сетью, в которую бы мы хотели включить удалённую машину. | ||
Строка 7: | Строка 7: | ||
На сервере есть бридж br0, в который "воткнуты" eth1 и wlan1, с адресом 192.168.0.1/24, при подключении клиент будет в этой сети иметь адрес 192.168.0.66. | На сервере есть бридж br0, в который "воткнуты" eth1 и wlan1, с адресом 192.168.0.1/24, при подключении клиент будет в этой сети иметь адрес 192.168.0.66. | ||
= Подготовка = | == Подготовка == | ||
== Устанавливаем необходимые пакеты == | === Устанавливаем необходимые пакеты === | ||
=== клиент === | ==== клиент ==== | ||
<source lang=bash> | <source lang=bash> | ||
apt-get install uml-utilities openssh-client | apt-get install uml-utilities openssh-client | ||
</source> | </source> | ||
=== сервер === | ==== сервер ==== | ||
<source lang=bash> | <source lang=bash> | ||
apt-get install uml-utilities openssh-server bridge-utils | apt-get install uml-utilities openssh-server bridge-utils | ||
</source> | </source> | ||
= Настройка = | == Настройка == | ||
== сервер == | === сервер === | ||
=== sshd === | ==== sshd ==== | ||
Разрешим туннелирование в конфиге /etc/ssh/sshd_config: | Разрешим туннелирование в конфиге /etc/ssh/sshd_config: | ||
Строка 38: | Строка 38: | ||
</source> | </source> | ||
=== interfaces === | ==== interfaces ==== | ||
Чтобы каждый раз вручную не создавать интерфейсы, просто пропишем их в /etc/network/interfaces: | Чтобы каждый раз вручную не создавать интерфейсы, просто пропишем их в /etc/network/interfaces: | ||
Строка 46: | Строка 46: | ||
auto tap8 | auto tap8 | ||
iface tap8 inet manual | iface tap8 inet manual | ||
pre-up tunctl -u | pre-up tunctl -u user -t $IFACE | ||
post-down tunctl -d $IFACE | post-down tunctl -d $IFACE | ||
up ifconfig $IFACE 0.0.0.0 up | up ifconfig $IFACE 0.0.0.0 up | ||
Строка 74: | Строка 74: | ||
(в дальнейшем они будут стартовать при загрузке системы) | (в дальнейшем они будут стартовать при загрузке системы) | ||
== клиент == | === клиент === | ||
=== interfaces === | ==== interfaces ==== | ||
<source lang=bash> | <source lang=bash> | ||
Строка 84: | Строка 84: | ||
pre-up tunctl -u user -t $IFACE | pre-up tunctl -u user -t $IFACE | ||
post-down tunctl -d $IFACE | post-down tunctl -d $IFACE | ||
address 192.168.0. | address 192.168.0.6 | ||
netmask 255.255.255.0 | netmask 255.255.255.0 | ||
</source> | </source> | ||
Строка 97: | Строка 97: | ||
= Подключаемся = | == Подключаемся == | ||
<source lang=bash> | <source lang=bash> | ||
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> | |||
= Минусы = | == Минусы == | ||
* Не цепляется адрес через dhcp | * Не цепляется адрес через dhcp | ||
* | |||
* Нельзя использовать tap интерфейс с отличным от цифрового индентификатором | |||
== См. также == | |||
* [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] | |||
[[Category:Сеть]] | [[Category:Сеть]] |
Текущая версия на 09:59, 4 августа 2014
Задача
Есть сервер 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 user -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.6
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
- Нельзя использовать tap интерфейс с отличным от цифрового индентификатором