ใช้ OpenVPN กับ systemd


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@.service /etc/systemd/system/แต่การเริ่มบริการ OpenVPN ใหม่ยังคงไม่พร้อมท์รหัสผ่าน

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

บทเรียนของ Fedora ทำตามขั้นตอนของการสร้างลิงก์สัญลักษณ์ แต่อย่าสร้างไฟล์. service ใด ๆ ใน walk-throughs

ฉันขาดอะไรไป ฉันจำเป็นต้องสร้าง 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)

symlink:

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

พรอมต์สำหรับรหัสผ่าน

ทุกอย่างทำงานได้ในขณะนี้ยกเว้นการได้รับแจ้งให้เชื่อมต่อรหัสผ่าน ฉันได้ลองวิธีนี้แล้ว ฉัน tweaked ไฟล์จากด้านบนเพียงเล็กน้อยและเพิ่มสคริปต์คาดหวังเหมือนในตัวอย่าง ทำงานเหมือนจับใจ! ไฟล์ของฉันอยู่ด้านล่าง

แก้ไขบรรทัดจากด้านบน /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ติดตั้งแล้ว

รหัสของสคริปต์ที่คาดหวัง:

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

Updated โพสต์ที่มีการผิดพลาดในปัจจุบัน
RoraΖ

ดูใน /var/log/{syslog,daemon.log} และjournalctl -b -mค้นหาสาเหตุที่ OpenVPN ออกจาก หนึ่งในสถานที่เหล่านั้นควรมีข้อความผิดพลาดจริง (หรือjournalctl -b -m _EXE=/usr/sbin/openvpnควรให้เฉพาะข้อความ OpenVPN)
Derobert

ใช่ฉันไปถึงที่นั่น เรากำลังตีปัญหารหัสผ่าน ฉันจะลองแก้ปัญหานี้: bbs.archlinux.org/viewtopic.php?id=150440 ขอบคุณสำหรับความช่วยเหลือของคุณ!
RoraΖ

คำตอบ:


11

ฉันคิดว่าการติดตั้ง Debian OpenVPN ด้วย systemd นั้นขาดไปหน่อย เพื่อให้ทำงานบนเครื่องของฉันฉันต้อง:

  1. สร้าง/etc/systemd/system/openvpn@.service.d(ไดเรกทอรี) และวางไว้ในไฟล์ใหม่ด้วยสิ่งนี้:

    [Unit]
    ต้อง = networking.service
    หลังจาก = networking.service
    local-after-ifup.confผมเรียกว่าไฟล์ของฉัน .confมันต้องจบลงด้วยการ (นี่เป็นบิตที่ปัจจุบันบิตขาดเล็กน้อย)

  2. สร้างไฟล์ใน/etc/tmpfiles.d(ฉันเรียกว่าฉันlocal-openvpn.conf) ที่มีเนื้อหา:

    # Type Path Mode UID GID Age Argument
    d / run / openvpn รูท 0755 รูท - -
    นี่คือข้อผิดพลาด Debian 741938 (แก้ไขใน 2.3.3-1)

  3. สร้าง symlink เป็นmulti-user.target.wants(เป็นวิธีที่ง่ายที่สุดsystemctl enable openvpn@CONF_NAME.service) เช่นถ้าคุณมีคุณต้องการใช้/etc/openvpn/foo.confopenvpn@foo.service

  4. หากคุณมีสคริปต์ init SysV แสดงใน systemd ให้ปิดการใช้งาน นี่คือข้อผิดพลาด Debian 700888 (แก้ไขใน 2.3.3-1)

หมายเหตุ: 2.3.3-1 หรือใหม่กว่านั้นยังไม่ได้ทำการทดสอบแม้ว่าจะไม่เสถียร


systemctl เปิดใช้งานยังคงล้มเหลวโดยบอกว่าไม่มีไฟล์หรือไดเรกทอรีดังกล่าว ฉันไม่เห็นสคริปต์ sysv init ใด ๆ ใน / lib / systemd ยกเว้นว่า systemd-initctl
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 ไม่รีสตาร์ทถ้าเกิดข้อผิดพลาดที่โง่มาก ... ใครบางคนรู้วิธีแก้ปัญหาหรือวิธีแก้ปัญหาฉันเขียนสคริปต์เพื่อตรวจสอบว่า 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/อะไร ฉันดูเหมือนจะมีทั้งในระบบของฉันมีเนื้อหาที่เหมือนกัน (และพวกเขาไม่ใช่ symlink!)
garethTheRed

ฉันเพิ่งเพิ่มไฟล์นั้นอัปเดตโพสต์ของฉันด้วยทุกสิ่ง
RoraΖ

5

openvpn@<configuration>.serviceคุณจำเป็นต้องสร้างไฟล์บริการโดยการเปิดใช้งาน

ตัวอย่างเช่นถ้าแฟ้มการกำหนดค่าเป็นชื่อบริการเป็น/etc/openvpn/client.confopenvpn@client.service

จาก Arch Wiki


$ sudo systemctl เปิดใช้งานรหัสผ่าน openvpn@vpn.service [sudo] สำหรับผู้ใช้: ไม่สามารถเรียกวิธีการเรียก: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
RoraΖ

ไฟล์กำหนดค่าของคุณชื่อ 'vpn' หรือไม่
Karlo

ใช่/etc/openvpn/vpn.conf
RoraΖ

ใช้งานไม่systemctl start openvpn@vpn.serviceได้เช่นกัน? ว่าควรทำงาน ...
Karlo

1
สิ่งนี้ใช้ได้กับฉันใน Raspbian GNU / Linux 8 (Debian Jessie) ขอบคุณ!
neuhaus

1

OpenVPN @ .service มีการพัฒนาอย่างมากระหว่าง Debians 8 และ 9 แพคเกจเดิม Jessie systemctl reload openvpn@เช่นล้มเหลวในการ ในการแก้ไขปัญหาเหล่านี้เวอร์ชัน Stretch แนะนำ 10 คำสั่งใหม่ใน systemd-file รวมถึงPIDFile=การทำให้โหลดซ้ำได้อีกครั้ง

สำหรับผู้ใช้ยืดผมขอแนะนำให้ไปสำหรับการย้ายกลับและถ้าไม่ได้ที่จะทำอย่างนั้นอย่างน้อยจะได้รับ systemd ไฟล์จากhttps://packages.debian.org/jessie-backports/openvpnและสารสกัดจากdebian/openvpn@.serviceเข้า/etc/systemd/system/openvpn@.serviceและสนุกกับการที่ดีขึ้น ฟังก์ชั่นและความปลอดภัย


0

วิธีแก้ปัญหาที่เหมาะสมคือการใช้ประโยชน์จาก systemd's systemd-ask-password/ " รหัสผ่านตัวแทน " ซึ่งให้วิธี systemd builtin เพื่อช่องทางรหัสผ่าน / วลีรหัสผ่านเพื่อการบริการ

คุณจะต้องใช้OpenVPN 2.3.0 หรือใหม่กว่าเพื่อทำสิ่งนี้


นี่คือสิ่งที่สคริปต์คาดหวังในโพสต์ที่แก้ไขของฉันใช้
RoraΖ

ขออภัยพลาดการแก้ไขนั้น
Elias Probst

0

ในการติดตั้ง Jessie_8.0.0 ใหม่ฉันทำ:

  1. คัดลอกไฟล์เก่า/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.