[SOLVED] VPN туннель средствами SSH, и особенности openrc.
Недавно столкнулся с необходимостью использовать компьютер с gentoo в качестве клиента такого сервиса как VPN средствами SSH.
И обнаружил одну особенность openrc, не отражённую в документации. Во всяком случае в /usr/share/doc/openrc*/net.example.bz2 об этом ни слова.
SSH, при подключении с ключём -w содаёт tun интерфейс, у openrc же есть свои механизмы, при поднятии интерфейса создающие ещё один tun/tap. В результате, получается два tun, одному openrc назначает адрес и настраивает маршрутизацию, а ssh использует другой, и ничего не работает.
Оказывается, в качестве модуля, в параметре tuntap_tun нужно указать пустую строку, из кода /lib/rc/net/tuntap.sh это видно, а в документации не отражено. В результате получилось так:
tuntap_tun0="" # Без этого openrc будет создавать свой tun, а нам его сделает ssh
config_tun0="10.1.0.2/24 peer 10.1.0.1"
preup() {
if [ "${IFACE}" == "tun0" ]
then
/usr/bin/ssh -i /root/.ssh/server_vpn -S /var/run/ssh-tunnel-server -M -fCN -w 0:0
sleep 3
fi
return 0
}
predown() {
# Remember to return 0 on success
return 0
}
postup() {
if [ "${IFACE}" == "tun0" ]
then
/sbin/route add -net 192.168.25.0 netmask 255.255.255.0 gw 10.1.0.1 tun0
fi
return 0
}
postdown() {
if [ "${IFACE}" == "tun0" ]
then
/usr/bin/ssh -i /root/.ssh/server_vpn -S /var/run/ssh-tunnel-server -O exit server.dyndns.com
fi
return 0
}
Теперь всё поднимается по /etc/init.d/tun0 start, и выключается по /etc/init.d/tun0 stop.
PS: Так и не понял как создать свой бложик для размещения таких заметок на этом сайте. Размещаю на форуме, может кому-то пригодится.
- Для комментирования войдите или зарегистрируйтесь
