부팅 시 Openvpn 구성 로드 및 네트워크 드라이브 마운트가 Debian에서 작동하지 않습니다.

부팅 시 Openvpn 구성 로드 및 네트워크 드라이브 마운트가 Debian에서 작동하지 않습니다.

이 스크립트가 있습니다.

#! /bin/sh
# /etc/init.d/vpnscript

### BEGIN INIT INFO

# Short-Description: Simple script to start a program at boot 
# Description:       A simple script from http://www.stuffaboutcode.comwhich    will start / stop a program a boot / shutdown.
### END INIT INFO

# If you want a command to always run, put it here

# Carry out specific functions when asked to by the system
case "$1" 
in start)
echo "Connecting to OPENVPN"
# Connect to the VPN
sudo openvpn /etc/openvpn/connection1.ovpn
sudo mount -a
;;
stop)
echo "Stopping OPENVPN"
# Disconnect
killall openvpn
;;
*)
echo "Usage: /etc/init.d/vpnscript {start|stop}"
exit 1
;;
esac

Openvpn 부분은 잘 작동하지만 프로세스를 사용하려고 하면 sudo mount -a아무 작업도 수행되지 않습니다(또는 무언가를 기다리는 중인지 모르겠습니다).

내가 원하는 것을 수행하는 다른 방법이 있습니까? 아니면 내 스크립트에 문제가 있습니까? 저는 쉘 스크립팅의 초보자입니다.

몇 가지 참고사항:

  • Debian 방식( )을 사용하여 OpenVPN을 시작해 보았지만 /etc/default/openvpn시작되지 않아서 이 방법으로 시도해 보았습니다.

  • 시스템에서 가장 중요한 일은 OpenVPN이 시작되기 전에 발생하며 OpenVPN 연결에서 네트워크 드라이브를 참조하는 mount -a항목이 있습니다 ./etc/fstab

  • 서버는 Openmediavault 3.0을 실행합니다.

답변1

당신이 보고 있는 기본적인 문제는 OpenVPN이 계속 실행되어 sudo openvpn /etc/openvpn/connection1.ovpn다시는 돌아갈 수 없다는 것입니다. 따라서 스크립트는 다음 줄에 도달하지 않습니다. (또한: init 스크립트는 루트로 실행되므로 없어야 합니다 sudo). 따라서 간단히 말해서 &줄 끝에 앰퍼샌드( )를 추가 해야 합니다. 또는 더 나은 방법은 OpenVPN에 해당 --daemon옵션을 제공하는 것입니다(단, 제한 사항에 대해서는 OpenVPN 문서를 읽어보세요).

물론이죠~해야 한다VPN을 활성화하는 Debian의 방법을 사용하세요. Jessie에서는 Pre-jessie 또는 systemd가 없는 Jessie에서는 해당 줄을 편집하고 변경하세요. (아마도 확장자를 에서 로 변경해야 할 수도 있습니다).systemctl enable [email protected]/etc/default/openvpnAUTOSTART.ovpn.conf

그러면 다음 문제를 발견하게 됩니다. OpenVPN이 반환됩니다.앞으로VPN이 활성화되었습니다. 그러나 VPN이 실제로 트래픽을 전달할 때까지는 마운트를 시작할 수 없습니다. 이 문제를 해결하기 위해 제가 찾은 가장 쉬운 방법은 systemd 서비스를 사용하여 VPN의 원격 측에 ping을 보내는 것입니다.

$ cat vpn-really-up.service
[Unit]
Description=Ping Einstein to make sure the VPN is really up
[email protected] 
[email protected] 

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

물론 init.d 스크립트에서 ping 라인을 사용할 수도 있습니다. (이건 아닐 수도 있으니 참고하세요.최고이를 수행하는 방법 - --route-up예를 들어 명령이 더 나을 수도 있습니다. 내가 설정할 때 이러한 것이 존재하지 않았는지 아니면 그것에 대해 몰랐는지 확실하지 않습니다. 내 컴퓨터가 실제로 테스트를 실행하고 있습니다. )

그런 다음 파일 시스템에 대한 systemd 마운트 장치를 생성할 수 있습니다. 내부 이름이 작동하도록 VPN을 통해 일부 도메인을 DNS 서버로 전달하는 데 사용하기 때문에 dnsmasq에도 의존합니다.

$ 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

(사용 중에 설치도 가능하며 실제로 systemd를 사용하면 매우 쉽습니다. 참고자료 참조 man 5 systemd.automount).

마지막으로, 중지 목표를 수정해야 합니다.~ 해야 하다VPN을 중지하기 전에 파일 시스템을 마운트 해제하십시오. 그렇지 않으면 컴퓨터가 다시 시작/종료될 때 작동이 중단됩니다. 작동하는지 테스트해야 합니다. 그렇지 않으면 어느 날 컴퓨터에 SSH로 접속하여 재부팅하고 재설정 버튼을 누르기 위해 계획되지 않은 이동을 해야 합니다.

추신: 나에게도 이 파일이 있습니다:

$ cat [email protected]/local-after-ifup.conf 
[Unit]
Requires=networking.service
After=networking.service

...내 생각에는 systemd가 네트워크 인터페이스를 중지하기 전에 OpenVPN(및 모든 VPN 파일 시스템)이 중지되었는지 확인해야 할 것 같습니다.

답변2

간단한 업데이트입니다.

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

그러나 마운트가 오류(22)를 반환합니다. 매개변수가 유효하지 않습니다.

제 질문은 다음 fstab 줄을 적절한 .mount 파일로 변환하는 올바른 방법은 무엇입니까?

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

관련 정보