Sử dụng OpenVPN với systemd


24

Ok, vì vậy tôi đã tìm kiếm trên web các giải pháp cho vấn đề này mà không có câu trả lời nào có vẻ hiệu quả với tôi. Hy vọng rằng ai đó có thể giúp tôi. Tôi chỉ đang cố gắng định cấu hình Máy khách OpenVPN.

Tôi đang chạy CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linuxvà tôi mới chuyển sang sử dụng systemd. Việc thay đổi đã diễn ra khá suôn sẻ nhưng bây giờ tôi không thể khiến ứng dụng khách OpenVPN của mình xuất hiện bằng systemd Tôi đã thử làm theo các hướng dẫn cấu hình này, nhưng không có gì hoạt động.

Tôi có thể mang đường hầm từ dòng lệnh với openvpn /etc/openvpn/vpn.conf. Vì vậy, tôi biết tập tin cấu hình là tốt, nó đã hoạt động với sysvinit tốt nên tôi không ngạc nhiên. Sau đó tôi cố gắng thực hiện một trạng thái với systemctl status openvpn@vpn.servicekết quả là:

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

Tôi nhận ra rằng tôi cần phải thực hiện một số thiết lập cho các dịch vụ. Tôi muốn được nhắc nhập một mật khẩu vì vậy tôi theo hướng dẫn này để tạo ra một openvpn@.servicetrong /etc/systemd/system/. Nhưng khởi động lại dịch vụ OpenVPN vẫn không nhắc mật khẩu.

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

Các hướng dẫn của Fedora trải qua các bước tạo liên kết tượng trưng, ​​nhưng không tạo bất kỳ tệp .service nào trong các hướng dẫn.

Tôi còn thiếu mảnh gì? Tôi có cần tạo openvpn@vpn.service không? Nếu vậy, chính xác thì tôi đặt nó ở đâu? Tôi cảm thấy không nên khó khăn như vậy, nhưng dường như tôi không thể tìm thấy bất kỳ giải pháp nào phù hợp với mình. Tôi rất vui được cung cấp thêm thông tin cần thiết.

Dung dịch

-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)

Liên kết:

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

Nhắc mật khẩu

Bây giờ mọi thứ đều hoạt động, ngoại trừ việc được nhắc nhập mật khẩu để kết nối. Tôi đã thử giải pháp này . Tôi đã điều chỉnh tệp từ phía trên chỉ một chút và thêm một tập lệnh Expect như trong ví dụ. Làm việc như một cơ duyên! Tập tin của tôi ở bên dưới

Các dòng sửa đổi từ trên /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

Kịch bản mong đợi /lib/systemd/system/openvpn_pw.exp. Hãy chắc chắn để làm như sau:

  • chmod +x trên kịch bản.
  • Đã telnetcài đặt

Mã của kịch bản mong đợi:

#!/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

Cần lưu ý rằng giải pháp trên có ghi nhật ký mật khẩu của bạn được nhập vào bản rõ trong các bản ghi sau /var/log/syslog/var/log/daemon.log


Làm thế nào để các openvpn@.servicetập tin trông như thế nào?
Cristian Ciupitu

Đã cập nhật bài đăng với lỗi hiện tại
RoraΖ

Hãy xem trong /var/log/ nbsyslog,daemon.log} và journalctl -b -mđể tìm hiểu lý do OpenVPN thoát. Một trong những nơi đó nên chứa các thông báo lỗi thực sự. (Hoặc thậm chí journalctl -b -m _EXE=/usr/sbin/openvpnchỉ nên cung cấp tin nhắn OpenVPN).
derobert

Đúng, tôi đã đến đó. Chúng tôi đang gặp vấn đề về mật khẩu. Tôi sẽ thử giải pháp này cho nó: bbs.archlinux.org/viewtopic.php?id=150440 Cảm ơn tất cả sự giúp đỡ của bạn!
RoraΖ

Câu trả lời:


11

Tôi nghĩ rằng thiết lập Debian OpenVPN với systemd hiện đang bị hỏng một chút. Để làm cho nó hoạt động trên máy của tôi, tôi đã phải:

  1. Tạo /etc/systemd/system/openvpn@.service.d(thư mục) và đặt vào đó một tệp mới với tệp này:

    [Đơn vị]
    Yêu cầu = mạng.service
    Sau = mạng. Dịch vụ
    Tôi gọi tập tin của tôi local-after-ifup.conf. Nó cần phải kết thúc với .conf. (Đây là bit hiện đang bị hỏng một chút.)

  2. Tạo một tệp trong /etc/tmpfiles.d(tôi gọi là của tôi local-openvpn.conf) với nội dung:

    # Loại Chế độ đường dẫn Đối số tuổi UID GID
    d / run / openvpn 0755 root root - -
    Đây là lỗi Debian 741938 (đã sửa trong phiên bản 2.3.3-1).

  3. Tạo một liên kết tượng trưng thành multi-user.target.wants(cách dễ nhất là systemctl enable openvpn@CONF_NAME.service) Ví dụ: nếu bạn có /etc/openvpn/foo.conf, bạn sẽ sử dụng openvpn@foo.service.

  4. Nếu bạn cũng có tập lệnh init SysV hiển thị trong systemd, hãy tắt nó đi. Đây là lỗi Debian 700888 (đã được sửa trong phiên bản 2.3.3-1).

LƯU Ý: 2.3.3-1 trở lên chưa được thử nghiệm , mặc dù nó không ổn định.


systemctl cho phép vẫn không nói rằng không có tập tin hoặc thư mục như vậy. Tôi không thấy bất kỳ tập lệnh init sysv nào trong / lib / systemd, trừ khi systemd-initctl của nó?
RoraΖ

@raz Kịch bản SysV sẽ là /etc/init.d/openvpn; systemd theo mặc định chạy những cái giống như sysv init. Đó là những openvpn.servicegì bạn có; bạn cần phải vô hiệu hóa nó ( systemctl disable). Tập tin /lib/systemd/system/openvpn@.servicecó tồn tại trên hệ thống của bạn không?
derobert

@raz Nếu bạn có tập tin đó, bạn có thể thử hướng dẫn sử dụngln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/multi-user.target.wants/openvpn@vpn.service
derobert

Tôi không có tập tin đó nhưng tôi chắc chắn mình có thể tạo nó. Tôi đã vô hiệu hóa/etc/init.d/openvpn script.
RoraΖ

@raz Tôi không chắc chắn nếu Crunchbang có backport của một gói OpenVPN mới hơn với nó, nhưng nếu không, bạn có thể lấy kịch bản từ sources.debian.net/src/openvpn/2.3.3-1/debian/...
derobert

8
  1. Đặt tất cả các tệp openvpn * .conf vào /etc/openvpn/.
  2. Chỉnh sửa /etc/default/openvpn. Không chú ý điều này:

    AUTOSTART="all"
    
  3. Chạy đi systemctl daemon-reload.

  4. Chạy đi service openvpn start.

Tôi nghĩ rằng họ đã sử dụng nó như một giải pháp, bởi vì bây giờ thậm chí còn tệ hơn trong debian 9, openvpn không khởi động lại nếu một lỗi phát sinh rất ngu ngốc ... Ai đó biết một số giải pháp hoặc cách giải quyết, tôi đang viết một kịch bản để xác minh nếu openvpn vẫn đang chạy
Luciano Andress Martini

Điều này là hoàn hảo. nó sẽ bắt đầu và dừng lại mặc dù tôi gọi nó là hiển nhiên client.conf, bây giờ với cấu hình duy nhất của tôi chỉ chạy. Cảm ơn!
Mitchell Currie

6

Loại tệp đơn vị này là một Dịch vụ tức thời - chi tiết có sẵn tại đây

Sau đây là tệp đơn vị cho openvpntrên CentOS 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

và nó cư trú như /usr/lib/systemd/system/openvpn@service. Trong %itệp được thay thế bằng chuỗi sau @tên đơn vị.

Vì tập tin cấu hình là lúc /etc/openvpn/myopenvpn.confđó, dịch vụ được bắt đầu với:

systemctl start openvpn@myopenvpn.service

Tôi chỉ không có /usr/lib/systemd/user/ gì khác ở /usr/lib/systemdcấp độ.
RoraΖ

Thế còn /lib/systemd/system/? Tôi dường như có cả hai trên hệ thống của mình, với nội dung giống hệt nhau (và chúng không phải là liên kết tượng trưng!).
garethTheRed

Tôi chỉ cần thêm tập tin đó, cập nhật bài viết của tôi với tất cả mọi thứ.
RoraΖ

5

Bạn cần tạo tập tin dịch vụ bằng cách kích hoạt openvpn@<configuration>.service.

Ví dụ: nếu tệp cấu hình là /etc/openvpn/client.conf, tên dịch vụ là openvpn@client.service.

Từ Wiki Wiki


$ sudo systemctl kích hoạt mật khẩu openvpn@vpn.service [sudo] cho người dùng: Không thể thực hiện cuộc gọi phương thức: Không có tệp hoặc thư mục như vậy
RoraΖ

Tập tin cấu hình của bạn được gọi là 'vpn'?
Karlo

Vâng,/etc/openvpn/vpn.conf
RoraΖ

Nó cũng systemctl start openvpn@vpn.servicekhông hoạt động? Điều đó sẽ làm việc ...
Karlo

1
Điều này hoạt động với tôi trên Raspbian GNU / Linux 8 (Debian Jessie). Cảm ơn!
neuhaus

1

Openvpn @ .service đã phát triển rất nhiều giữa Debians 8 và 9. Gói ban đầu cho Jessie chẳng hạn systemctl reload openvpn@. Để khắc phục những điều này, phiên bản Stretch giới thiệu 10 chỉ thị mới trong tệp systemd bao gồm PIDFile=để làm cho tải lại hoạt động trở lại.

Đối với người dùng Stretch, tôi muốn đề nghị đi cho backport, và nếu không thể làm điều đó, ít nhất là có được systemd-file từ https://packages.debian.org/jessie-backports/openvpn và chiết xuất debian/openvpn@.servicethành /etc/systemd/system/openvpn@.servicevà tận hưởng tốt hơn chức năng và bảo mật.


0

Giải pháp thích hợp là, sử dụng systemd-ask-password/ " Đại lý mật khẩu " của systemd , cung cấp cách thức dựng sẵn trong hệ thống để chuyển mật khẩu / cụm mật khẩu cho các dịch vụ.

Bạn sẽ cần OpenVPN 2.3.0 hoặc mới hơn để làm điều này.


Đây là những gì tập lệnh Expect trong bài viết đã chỉnh sửa của tôi sử dụng.
RoraΖ

Xin lỗi, đã bỏ lỡ chỉnh sửa đó.
Elias Probst

0

Trên bản cài đặt mới của Jessie_8.0.0, tôi đã làm:

  1. sao chép các tập tin cũ /etc/openvpn/cluster.conf(cộng *.key*.crt) từ wheezy
  2. không chú ý AUTOSTART="all"đến /etc/default/openvpn- tôi nghĩ rằng điều này không có tác dụng
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart openvpn@cluster.service

Bây giờ đường hầm đã hoạt động - Tôi sẽ xem điều gì sẽ xảy ra sau khi khởi động lại, nhưng tôi không thể khởi động lại trong thời điểm này

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.