systemd와 함께 OpenVPN 사용


24

좋아, 그래서 나에게 효과가없는 것처럼이 문제에 대한 해결책을 찾기 위해 웹을 검색했습니다. 누군가가 나를 도울 수 있기를 바랍니다. OpenVPN 클라이언트 만 구성하려고합니다.

나는 달리고 CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linux있으며 방금 사용으로 전환했습니다 systemd. 전환이 순조롭게 진행되었지만 이제는 OpenVPN 클라이언트가 systemd를 사용하여 올 수 없습니다.이 구성 자습서를 따라 시도했지만 아무것도 작동하지 않습니다.

명령 줄에서을 사용하여 터널을 가져올 수 있습니다 openvpn /etc/openvpn/vpn.conf. 그래서 구성 파일이 훌륭하다는 것을 알고 있습니다 .sysvinit과 잘 작동했기 때문에 놀라지 않았습니다. 그런 다음 상태를 유지하려고 시도합니다 systemctl status openvpn@vpn.service.

$ sudo systemctl status openvpn@vpn.service
  openvpn@vpn.service
Loaded: error (Reason: No such file or directory)
Active: inactive (dead)

서비스를 설정해야한다는 것을 깨달았습니다. 비밀번호를 입력하라는 메시지가 표시되어이 안내서에 따라 openvpn@.servicein 을 만들었 습니다 /etc/systemd/system/. 그러나 OpenVPN 서비스를 다시 시작해도 여전히 암호를 묻는 메시지가 표시되지 않습니다.

$ sudo service openvpn restart
[ ok ] Restarting openvpn (via systemctl): openvpn.service.

Fedora 튜토리얼은 심볼릭 링크를 만드는 단계를 거치지 만 연습에서는 .service 파일을 만들지 않습니다.

내가 놓친 부분은 무엇입니까? openvpn@vpn.service를 만들어야합니까? 그렇다면 정확히 어디에 배치해야합니까? 나는 그렇게 어렵지 않아야한다고 생각하지만 나에게 맞는 해결책을 찾지 못하는 것 같습니다. 필요한 정보를 더 제공해 드리겠습니다.

해결책

-rw-r--r--  1 root root   319 Aug  7 10:42 openvpn@.service

[Unit]
Description=OpenVPN connection to %i
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --config /etc/openvpn/%i.conf
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn

[Install]
WantedBy=multi-user.target
openvpn@.service (END)

심 링크 :

lrwxrwxrwx  1 root root   36 Aug  7 10:47 openvpn@vpn.service -> /lib/systemd/system/openvpn@.service

비밀번호 묻기

연결할 암호를 묻는 메시지를 제외하고 모든 것이 작동합니다. 이 솔루션을 시도 했습니다 . 위의 파일을 약간 조정 하고 예제와 같이 Expect 스크립트를 추가했습니다 . 매력처럼 일하는! 내 파일은 아래와 같습니다.

위의 수정 된 줄 /lib/systemd/system/openvpn@.service

ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --management localhost 5559 --management-query-passwords --management-forget-disconnect --config /etc/openvpn/%i.conf
ExecStartPost=/usr/bin/expect /lib/systemd/system/openvpn_pw.exp

스크립트를 기대하십시오 /lib/systemd/system/openvpn_pw.exp. 다음을 수행하십시오.

  • chmod +x 스크립트에서.
  • 적이 telnet설치

expect 스크립트 코드 :

#!/usr/bin/expect
set pass [exec /bin/systemd-ask-password "Please insert Private Key password: "]

spawn telnet 127.0.0.1 5559
expect "Enter Private Key Password:"
send "password 'Private Key' $pass\r"
expect "SUCCESS: 'Private Key' password entered, but not yet verified"
send "exit\r"
expect eof

위의 솔루션에 다음과 같은 로그에 일반 텍스트로 입력 된 암호를 기록 않는다는 것을 주목해야한다 /var/log/syslog와/var/log/daemon.log


openvpn@.service파일은 어떻게 생겼습니까?
— Cristian Ciupitu

현재 오류로 게시물 업데이트
— RoraΖ

/var/log/{syslog,daemon.log}에서 journalctl -b -mOpenVPN이 종료 된 이유를 찾으십시오. 이러한 장소 중 하나에 실제 오류 메시지가 포함되어야합니다. 또는 journalctl -b -m _EXE=/usr/sbin/openvpnOpenVPN 메시지 만 제공해야합니다.
— derobert

그래, 나는 거기에 도착했다. 비밀번호 문제가 발생했습니다. 나는 그것을 위해이 솔루션을하려고합니다 : bbs.archlinux.org/viewtopic.php?id=150440 모든 당신의 도움을 주셔서 감사합니다!
— RoraΖ

답변:


11

systemd를 사용한 데비안 OpenVPN 설정은 현재 약간의 고장이라고 생각합니다. 내 컴퓨터에서 작동하게하려면 :

  1. /etc/systemd/system/openvpn@.service.d(디렉토리)를 생성 하고 다음과 같이 새 파일을 배치하십시오.

    [단위]
    요구 사항 = networking.service
    후 = networking.service
    나는 나의 파일을 불렀다 local-after-ifup.conf. 로 끝나야합니다 .conf. (이것은 현재 조금 엉망인 비트입니다.)

  2. 내용 으로 /etc/tmpfiles.d(내 이름 은)에 파일을 만듭니다 local-openvpn.conf.

    # 타입 경로 모드 UID GID Age Argument
    d / run / openvpn 0755 루트 루트--
    이것은 데비안 버그 741938입니다 (2.3.3-1에서 수정 됨).

  3. 에 multi-user.target.wants가장 쉬운 방법으로 심볼릭 링크를 만드십시오. systemctl enable openvpn@CONF_NAME.service예를 들어 있다면을 /etc/openvpn/foo.conf사용하십시오 openvpn@foo.service.

  4. systemd에 SysV init 스크립트도 표시되어 있으면 비활성화하십시오. 이것은 데비안 버그 700888입니다 (2.3.3-1에서 수정 됨).

참고 : 2.3.3-1 이상은 아직 불안정하지만 불안정한 상태입니다.


systemctl enable은 여전히 ​​그러한 파일이나 디렉토리가 없다고 말하지 않습니다. systemd-initctl이 아니면 / lib / systemd에 sysv init 스크립트가 표시되지 않습니까?
— RoraΖ

@raz SysV 스크립트는 다음과 같습니다 /etc/init.d/openvpn. 기본적으로 systemd는 sysv init과 같은 것을 실행합니다. 그것이 openvpn.service당신이 가진 것입니다. 비활성화해야합니다 ( systemctl disable). 파일 /lib/systemd/system/openvpn@.service이 시스템에 있습니까?
— derobert

@raz 해당 파일이 있으면 수동으로 시도해보십시오ln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/multi-user.target.wants/openvpn@vpn.service
— derobert

해당 파일이 없지만 만들 수 있다고 확신합니다. 나는/etc/init.d/openvpn script.
— RoraΖ

@raz Crunchbang 그것으로 새로운 OpenVPN을 패키지의 백 포트를 가지고 있는지 확실하지 않습니다,하지만, 당신은에서 해당 스크립트를 잡아 수 sources.debian.net/src/openvpn/2.3.3-1/debian/...
— derobert

8
  1. 모든 openvpn * .conf 파일을에 넣으십시오 /etc/openvpn/.
  2. 편집 /etc/default/openvpn. 주석 처리를 제거하십시오.

    AUTOSTART="all"
    
  3. 를 실행하십시오 systemctl daemon-reload.

  4. 를 실행하십시오 service openvpn start.

나는 그들이 해결책으로 사용했다고 생각합니다. 지금은 데비안 9에서 더 나쁘기 때문에 매우 어리석은 오류가 발생하면 openvpn이 다시 시작되지 않습니다 ... 누군가 해결책이나 해결 방법을 알고 있습니다. 아직 뛰고있다!
— Luciano Andress Martini

이것은 완벽했다. 내가 그것을 명백하다고 부르더라도 시작하고 멈출 것입니다 client.conf. 이제 단 하나의 구성 만 실행됩니다. 감사!
— Mitchell Currie

6

이 유형의 단위 파일은 인스턴스화 된 서비스입니다. 자세한 내용은 여기를 참조 하십시오.

다음은 openvpnCentOS 7 의 유닛 파일입니다 .

[Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
After=syslog.target network.target

[Service]
PrivateTmp=true
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf

[Install]
WantedBy=multi-user.target

그리고로 존재합니다 /usr/lib/systemd/system/openvpn@service. %i파일의이 후 문자열로 대체 @단위 이름이다.

구성 파일이 있으면 /etc/openvpn/myopenvpn.conf서비스는 다음과 같이 시작됩니다.

systemctl start openvpn@myopenvpn.service

나는 레벨에 /usr/lib/systemd/user/ 다른 것이 없습니다 /usr/lib/systemd.
— RoraΖ

무엇에 대해 /lib/systemd/system/? 나는 동일한 내용을 가진 시스템에 둘 다있는 것처럼 보입니다 (심볼릭 링크가 아닙니다!).
— garethTheRed

방금 해당 파일을 추가하고 모든 게시물을 업데이트했습니다.
— RoraΖ

5

을 활성화하여 서비스 파일을 작성해야합니다 openvpn@<configuration>.service.

예를 들어, 구성 파일이 /etc/openvpn/client.conf인 경우 서비스 이름은 openvpn@client.service입니다.

아치 위키에서


$ sudo systemctl enable openvpn@vpn.service [sudo] 사용자의 비밀번호 : 메소드 호출을 발행하지 못했습니다 : 해당 파일 또는 디렉토리가 없습니다
— RoraΖ

구성 파일이 'vpn'입니까?
— Karlo

예/etc/openvpn/vpn.conf
— RoraΖ

않습니다 systemctl start openvpn@vpn.service중 하나가 작동하지? 즉 한다 ... 일
— 카를로

1
이것은 Raspbian GNU / Linux 8 (Debian Jessie)에서 작동합니다. 감사!
— neuhaus

1

openvpn @ .service는 데비안 8과 9 사이에서 크게 발전했습니다 systemctl reload openvpn@. 예를 들어 Jessie의 원래 패키지는 실패합니다 . 이 문제를 해결 PIDFile=하기 위해 다시로드 작업을 다시 수행하는 것을 포함하여 systemd-file에 10 개의 새로운 지시문이 도입되었습니다 .

스트레치 사용자의 경우, 나는 백 포트가는 게 좋을 것, 가능하지 않으면 것은에서 systemd-파일을 가져 적어도 그, 할 https://packages.debian.org/jessie-backports/openvpn 및 추출물 debian/openvpn@.service로를 /etc/systemd/system/openvpn@.service더 잘 즐길 수 기능과 보안.


0

적절한 해결책은 systemd의 systemd-ask-password/ " Password Agents "를 사용하는 것입니다. 이는 시스템에 기본 제공 방식으로 서비스에 암호 / 암호를 퍼널하는 방법을 제공합니다.

이를 위해서는 OpenVPN 2.3.0 이상 이 필요합니다.


이것이 내가 편집 한 게시물의 Expect 스크립트가 사용하는 것입니다.
— RoraΖ

죄송합니다. 수정 사항이 없습니다.
— Elias Probst

0

Jessie_8.0.0을 새로 설치하면 다음과 같이했습니다.

  1. wheezy에서 이전 /etc/openvpn/cluster.conf(플러스 *.key및 *.crt) 파일 복사
  2. 주석 AUTOSTART="all"에 /etc/default/openvpn- 나는이 영향을 미치지 않았다 생각
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart openvpn@cluster.service

이제 터널이 가동되었습니다. 재부팅 후 어떤 일이 발생하는지 볼 수 있지만 지금은 재부팅 할 수 없습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.