![부팅 시 Openvpn 구성 로드 및 네트워크 드라이브 마운트가 Debian에서 작동하지 않습니다.](https://linux55.com/image/104086/%EB%B6%80%ED%8C%85%20%EC%8B%9C%20Openvpn%20%EA%B5%AC%EC%84%B1%20%EB%A1%9C%EB%93%9C%20%EB%B0%8F%20%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%20%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B8%8C%20%EB%A7%88%EC%9A%B4%ED%8A%B8%EA%B0%80%20Debian%EC%97%90%EC%84%9C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
이 스크립트가 있습니다.
#! /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/openvpn
AUTOSTART
.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