Загрузить конфигурацию Openvpn при загрузке и смонтировать сетевой диск не будет работать в Debian

Используйте sort , чтобы отсортировать их по первому полю, а затем по второму полю в порядке убывания числовых значений. Используйте Awk для печати только первой строки для каждого отдельного значения первого поля.

sort -k1,1 -k2rn inputfile | awk '!a[$1]++'
2
25.02.2017, 18:52
2 ответа

Основная проблема, которую вы видите, заключается в том, что OpenVPN остается запущенным, поэтому ваш sudo openvpn /etc/openvpn/connection1.ovpn никогда не возвращается. Таким образом, ваш скрипт никогда не перейдет к следующей строке. (Также: скрипты init запускаются от имени root, поэтому там не должно быть sudo). Итак, тривиально, вам нужно добавить амперсанд (&) в конец этой строки или, что еще лучше, дать OpenVPN опцию --daemon (но прочитайте документацию OpenVPN об ограничениях этого).

Конечно, вы должны просто использовать способ Debian для включения VPN: на Jessie это будет systemctl enable openvpn@connection1.service. На предыдущей версии Jessie, или на Jessie без systemd, это будет редактирование /etc/default/openvpn и изменение строки AUTOSTART. (Возможно, вам также потребуется изменить расширение с .ovpn на .conf).

Затем вы столкнетесь со следующей проблемой: OpenVPN вернет до VPN. Но вы не можете запустить монтирование, пока VPN не начнет пропускать трафик. Самый простой способ, который я нашел для решения этой проблемы - это служба systemd, которая пингует удаленный конец VPN:

$ cat vpn-really-up.service
[Unit]
Description=Ping Einstein to make sure the VPN is really up
Wants=openvpn@vpn-name.service 
After=openvpn@vpn-name.service 

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/ping -c 2 -w 300 192.168.X.Y
TimeoutStartSec=330

Конечно, вы можете использовать эту строку ping и в сценарии init.d. (Обратите внимание, что это может быть не лучший способ сделать это - например, может быть, команда --route-up была бы лучше - не уверен, существовали ли они, когда я устанавливал это, или я не знал о них. На моей машине идет тестирование.)

Затем вы можете создать systemd mount units для вашей файловой системы (обратите внимание, что этот параметр также зависит от dnsmasq, потому что я использую его для перенаправления некоторых доменов на DNS-сервер через VPN, чтобы внутренние имена работали):

$ cat mnt-Einstein-music.mount 
[Unit]
Description=/mnt/Einstein/music
Requires=dnsmasq.service vpn-really-up.service
After=dnsmasq.service vpn-really-up.service remote-fs-pre.target

[Mount]
Where=/mnt/Einstein/music
What=Einstein.home:/srv/music
Options=nosuid,nodev,intr,rsize=4096,wsize=4096,nfsvers=3,fsc
Type=nfs
TimeoutSec=180s

[Install]
WantedBy=multi-user.target

(Mount on use тоже подойдет, и это на самом деле довольно просто с systemd - смотрите man 5 systemd.automount).

Наконец, ваша цель остановки нуждается в исправлении: вы должны размонтировать файловые системы перед остановкой VPN. Иначе ваша машина зависнет при перезагрузке/выключении. И вы должны проверить, что это работает - иначе однажды вы войдете в машину и перезагрузите ее, и вам придется совершить незапланированную поездку, чтобы нажать кнопку перезагрузки.

PS: У меня также есть этот файл:

$ cat openvpn@.service.d/local-after-ifup.conf 
[Unit]
Requires=networking.service
After=networking.service

... я предполагаю, что в какой-то момент это было необходимо, чтобы убедиться, что OpenVPN (и, следовательно, все файловые системы over-VPN) остановлены до того, как systemd остановит сетевые интерфейсы.

2
27.01.2020, 22:10

Коротко Обновить.

OPENVPN теперь работает нормально, спасибо.

Последнее, над чем мне нужно поработать, это:

$ cat mnt-SHAREDNAS.mount 
[Unit]
Description=/mnt/SHAREDNAS
Requires=vpn-really-up.service
After=vpn-really-up.service remote-fs-pre.target

[Mount]
Where=/mnt/SHAREDNAS
What=//192.168.50.10/Users/RsyncNAS/SharedNASData
Options=uid=root,credentials=/root/.smbcredentials,iocharset=utf8,sec=ntlm   0       0
Type=cifs
TimeoutSec=180s

[Install]
WantedBy=multi-user.target

Но mount возвращается с ошибкой (22): недопустимый аргумент.

Итак, мой вопрос: как правильно преобразовать эту строку fstab ниже в правильный файл .mount:

//192.168.50.10/Users/RsyncNAS/SharedNASData  /media/SHAREDNAS  cifs   uid=root,credentials=/root/.smbcredentials,iocharset=utf8,sec=ntlm   0       0
0
27.01.2020, 22:10

Теги

Похожие вопросы