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.