ฉันจะรันสคริปต์ได้อย่างไรหลังจาก OpenVPN เชื่อมต่อสำเร็จแล้ว


50

ฉันจะเชื่อมโยงสคริปต์กับ OpenVPN เพื่อให้ทำงานได้เมื่อเชื่อมต่อ VPN สำเร็จหรือไม่


ในกรณีของลูกค้าฉันเดา? คุณใช้ซอฟต์แวร์อะไร OpenVPN หรือ wrapper (เช่น NetworkManager)
Lekensteyn

@Lekensteyn, network-manger-openvpnเสื้อคลุม
Oxwivi

คำตอบ:


62

network-manager-openvpnไม่ได้ให้ฟังก์ชั่นดังกล่าวคุณต้องใช้openvpnโดยตรง

ผ่าน--script-security 2 --up /path/to/your/scriptไปเมื่อเชื่อมต่อ หากคุณใช้ไฟล์กำหนดค่าที่อยู่/etc/openvpn/ให้เพิ่มบรรทัดถัดไปลงในไฟล์กำหนดค่าของคุณ:

script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh

จากmanpage ของ OpenVPN :

- ระดับความปลอดภัย [วิธี]
              คำสั่งนี้มีการควบคุมระดับนโยบายสำหรับการใช้งานของ OpenVPN
              ของโปรแกรมภายนอกและสคริปต์ ค่าระดับที่ต่ำกว่ามีมากขึ้น
              ข้อ จำกัด ค่าที่สูงกว่าอนุญาตได้มากกว่า การตั้งค่าสำหรับ
              ระดับ:

              0 - เคร่งครัดไม่มีการเรียกโปรแกรมภายนอก
              1 - (ค่าเริ่มต้น) เรียกใช้ไฟล์ในตัวเท่านั้นเช่น ifconfig
              ip, เส้นทางหรือ netsh
              2 - อนุญาตให้เรียกใช้ไฟล์ปฏิบัติการในตัวและกำหนดโดยผู้ใช้
              สคริปต์
              3 - อนุญาตให้ส่งรหัสผ่านไปยังสคริปต์ผ่านทางสภาวะแวดล้อม
              ตัวแปร (อาจไม่ปลอดภัย)
       - ขึ้น cmd
              คำสั่ง Shell ให้ทำงานหลังจากเปิดอุปกรณ์ TUN / TAP ที่ประสบความสำเร็จ (ก่อน
              - การเปลี่ยนแปลง UID ของผู้ใช้) สคริปต์ up มีประโยชน์สำหรับการระบุ
              คำสั่งเส้นทางที่การรับส่งข้อมูล IP ของเส้นทางที่กำหนดไว้สำหรับส่วนตัว
              ซับเน็ตที่มีอยู่ที่ปลายอีกด้านหนึ่งของการเชื่อมต่อ VPN เข้า
              อุโมงค์
ลำดับของการดำเนินการสคริปต์
       - อัพดำเนินการหลังจากการเชื่อมต่อซ็อกเก็ต TCP / UDP และ TUN / TAP เปิด
       - down ดำเนินการหลังจากปิด TCP / UDP และ TUN / TAP

มีกิจกรรมอื่น ๆ อีกมากมายสำหรับการดำเนินการสคริปต์เป็นผู้ที่สามารถพบได้บนหน้าคู่มือ

สร้าง/etc/openvpn/up.shและให้สิทธิ์ดำเนินการ (เช่น 755 หรือ 700) ตัวอย่างเนื้อหาสำหรับการเพิ่มที่อยู่ IPv6 และเส้นทาง (แสดงเพื่อการศึกษาอย่าคัดลอกโดยตรง):

#!/bin/sh
# add an IPv6 address to device $dev (environment variable)
ip -6 addr add 2001:db8::1:2/112 dev $dev
# and the IPv6 route for this net using gateway 2001:db8::1
ip -6 route add 2001:db8::1:0/112 via 2001:db8::1 dev $dev

โปรดทราบว่าupสคริปต์นี้ทำงานเป็นรูท หากคุณไม่ได้ระบุUserและGroupการตั้งค่า OpenVPN จะเรียกใช้สคริปต์เช่นเดียวdownกับรูท


หากคุณไม่ทราบวิธีการใช้ openvpn โดยตรงเพิ่มรายละเอียดการกำหนดค่าปัจจุบันของคุณ: ประเภทการเชื่อมต่อ (เช่นใบรับรอง X509), พอร์ตเกตเวย์, การบีบอัด LZO, การบังคับใช้ TCP, การใช้อุปกรณ์ประปา, รหัส, HMAC และ TLS พูดถึงการตั้งค่า IP ของคุณด้วยหากไม่ได้เป็นไปโดยอัตโนมัติ เพื่อความเป็นส่วนตัวของคุณออกจากที่อยู่ที่แท้จริงของคุณ
Lekensteyn

โอเคฉันตัดสินใจใช้ OpenVPN โดยตรง (และใช่ฉันมีไฟล์. config) แต่จะเชื่อมต่อใหม่โดยอัตโนมัติหากการเชื่อมต่อขาดหายไปหรือไม่ และฉันจะเชื่อมต่ออัตโนมัติได้อย่างไรเมื่อใดก็ตามที่มีการเชื่อมต่ออินเทอร์เน็ต และในที่สุดฉันไม่เข้าใจว่าฉันต้องเพิ่มบรรทัดที่คุณพูดถึงในคำตอบอย่างไร
Oxwivi

ฉันได้ขยายคำตอบเพื่อใช้openvpnโดยตรง เมื่อตั้งค่าเซิร์ฟเวอร์ฉันสังเกตเห็นว่า OpenVPN จะพยายามเชื่อมต่อใหม่เมื่อเซิร์ฟเวอร์หยุดทำงาน ไม่แน่ใจว่า OpenVPN ยังคงพยายามต่อไปเมื่อส่วนต่อประสานเครือข่ายของคุณหยุดทำงาน
Lekensteyn

ปัญหาของฉันไม่ได้เมื่ออินเทอร์เฟซเครือข่ายหยุดทำงาน - พยายามเชื่อมต่อใหม่เมื่อการเชื่อมต่ออินเทอร์เน็ตสูญหายและกลับคืนมา ฉันแค่ต้องการเชื่อมต่อกับ VPN ทุกครั้งที่ฉันได้รับการเชื่อมต่ออินเทอร์เน็ต
Oxwivi

โอ้และสคริปต์ใช้กับการเชื่อมต่อ VPN ทั้งหมดหรือไม่ และโปรดติดแท็ก @Oxwivi เมื่อตอบกลับฉันจะไม่ได้รับแจ้งเป็นอย่างอื่น
Oxwivi

5

สำหรับคำถาม: "ฉันจะเชื่อมโยงสคริปต์กับ OpenVPN เพื่อให้ทำงานได้อย่างไรเมื่อเชื่อมต่อ VPN สำเร็จ" ผมอยากจะชี้ให้เห็นว่าLekensteynให้ดีเยี่ยมคำตอบ แต่ในขณะที่คำตอบของเขาถูกแต่งขึ้นมันขาดความชัดเจนเล็กน้อยว่าอาร์กิวเมนต์ของบรรทัดรับคำสั่ง openvpn ควรถูกจัดเตรียมเพื่อเริ่ม openvpn บนเครื่อง ubuntu โดยเฉพาะอย่างยิ่งเพื่อให้ทำงานได้เหมือนกันหลังจากรีบูต


อาร์กิวเมนต์บรรทัดคำสั่ง Openvpn บน Ubuntu:

โดยธรรมชาติเราสามารถเริ่ม openvpn จากบรรทัดคำสั่งด้วยตัวเลือกทางกฎหมายที่มีให้เลือก แต่ในเครื่องอูบุนตูถ้าใครต้องการที่จะเริ่มต้น OpenVPN /etc/default/openvpnกับอาร์กิวเมนต์บรรทัดคำสั่งเดียวกันหลังจากรีบูตพวกเขาควรจะพิจารณาการแก้ไขไฟล์ ตรวจสอบบรรทัดต่อไปนี้:

# Optional arguments to openvpn's command line
OPTARGS="" 

จากชุมชน openvpn man pageบน--script-security

- ระดับความปลอดภัย -
    คำสั่งนี้มีการควบคุมระดับนโยบายสำหรับการใช้งานภายนอกของ OpenVPN 
    โปรแกรมและสคริปต์ ค่าระดับที่ต่ำกว่ามีข้อ จำกัด มากขึ้นสูงกว่า
    ค่าอนุญาตมากขึ้น การตั้งค่าสำหรับระดับ:
0 - เคร่งครัดไม่มีการเรียกโปรแกรมภายนอก 
1 - (ค่าเริ่มต้น) เรียกใช้ไฟล์ปฏิบัติการในตัวเท่านั้นเช่น ifconfig, ip, เส้นทาง,
หรือแห 
2 - อนุญาตให้เรียกใช้ไฟล์ปฏิบัติการในตัวและสคริปต์ที่ผู้ใช้กำหนด 
3 - อนุญาตให้ส่งรหัสผ่านไปยังสคริปต์ผ่านตัวแปรสภาวะแวดล้อม
(อาจไม่ปลอดภัย)

OpenVPN ออกมาก่อน v2.3 ยังสนับสนุนการตั้งค่าเมธอดซึ่งระบุวิธี 
OpenVPN ควรเรียกใช้คำสั่งและสคริปต์ภายนอก สิ่งนี้อาจถูกประหารชีวิต
หรือระบบ ในฐานะของ OpenVPN v2.3 ธงนี้ไม่ได้รับการยอมรับอีกต่อไป ในที่สุด * ระวัง
สภาพแวดล้อมที่ใช้วิธี execve () โดยไม่มีปัญหาใด ๆ

คำสั่งบางอย่างเช่น - อัพอนุญาตให้ตัวเลือกถูกส่งผ่านไปยังสคริปต์ภายนอก
ในกรณีเหล่านี้ตรวจสอบให้แน่ใจว่าชื่อสคริปต์ไม่มีช่องว่างหรือ 
ตัวแยกวิเคราะห์การกำหนดค่าจะทำให้หายใจไม่ออกเพราะไม่สามารถระบุตำแหน่งของสคริปต์ได้ 
สิ้นสุดชื่อและตัวเลือกสคริปต์เริ่มต้น

รวมกับส่วนย่อบน --up

- ขึ้น cmd
    เรียกใช้คำสั่ง cmd หลังจากเปิดอุปกรณ์ TUN / TAP สำเร็จ (เปลี่ยน UID ผู้ใช้ล่วงหน้า)
    cmd ประกอบด้วยเส้นทางไปยังสคริปต์ (หรือโปรแกรมที่เรียกใช้งานได้) ซึ่งเป็นทางเลือก
    โดยการขัดแย้ง เส้นทางและอาร์กิวเมนต์อาจเป็นแบบเดี่ยวหรือสองครั้งและ / หรือ
    หลบหนีโดยใช้แบ็กสแลชและควรคั่นด้วยช่องว่างหนึ่งช่องขึ้นไป

ตัวอย่าง:

บนเครื่องของฉันที่มีเซิร์ฟเวอร์ openpvn ฉันมีบรรทัดต่อไปนี้ใน/etc/default/openvpnไฟล์ของฉัน:

OPTARGS="
    --script-security 2
    --up /etc/openvpn/nat.sh
" 

อนึ่ง nat.sh ตั้งค่าการแปลที่อยู่เครือข่ายสำหรับการกำหนดเส้นทางการรับส่งข้อมูลเครือข่ายส่วนตัวจากไคลเอนต์ openvpn ไปยังอินเทอร์เน็ตสาธารณะ ซึ่งเป็นสิ่งที่ดีสำหรับเมื่อไม่ไว้วางใจจุดเชื่อมต่อ WiFi สาธารณะ


นอกเหนือจากการอนุญาตให้รีสตาร์ทตามที่คาดไว้หลังจากรีบูตเมื่อใด/etc/openvpn/[client or server].confและ/etc/default/openvpnไฟล์ได้รับการกำหนดค่าอย่างเหมาะสม openvpn สามารถเริ่มต้นหรือหยุดได้ด้วย:

sudo service openvpn start
sudo service openvpn stop

ตัวเลือกที่มีประโยชน์อื่น ๆ สามารถใช้ได้สำหรับการรวม service openvpncond-restart,force-reload,reload, restart,soft-restart, start, status, stop


3

ในฐานะที่เป็นด้ายเก่าฉันไม่แน่ใจว่ายังคงสนใจ หากคุณยังต้องการใช้ NetworkManager เพื่อเชื่อมต่อกับ VPN คุณสามารถเพิ่มกฎ udev แบบง่าย ๆ เช่นนี้:

KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"

สิ่งนี้ควรเรียกใช้สคริปต์ใด ๆ หลังจากสร้าง VPN


1

ฉันสะดุดกับคำตอบในการวิจัยของฉันเพื่อแก้ไขปัญหานี้และฉันพบว่าทางออกที่ดีที่สุดคือ (ใช้เซิร์ฟเวอร์ openvpn) ดังนี้

สร้างสคริปต์ที่จะดำเนินการ:

# nano /etc/openvpn/up.sh
<file:contents>
#!/bin/sh

# export >> /var/log/openvpn/openvpn-up.log
D=`date "+%Y-%m-%d %H:%M"`
echo "[$D] ($local_port_1:$proto_1) $X509_0_CN: $trusted_ip => $ifconfig_pool_remote_ip" >> /var/log/openvpn/openvpn-up.log
</file>

เพิ่มบรรทัดต่อไปนี้ลงในการกำหนดค่า openvpn (ปกติ/etc/openvpn/server.conf) ในคำตอบข้างต้นมันถูกใช้ขึ้นและลงซึ่งจะใช้เมื่อเซิร์ฟเวอร์เริ่มต้น (รีสตาร์ท) directive client-connect (และ client-disconnect) จะถูกใช้เมื่อไคลเอนต์เชื่อมต่อ (disconnects)

# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>

คุณจะรวมชื่อการกำหนดค่าไคลเอนต์ในไฟล์บันทึกอย่างไร
callisto
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.