ฉันจะเชื่อมโยงสคริปต์กับ OpenVPN เพื่อให้ทำงานได้เมื่อเชื่อมต่อ VPN สำเร็จหรือไม่
network-manger-openvpn
เสื้อคลุม
ฉันจะเชื่อมโยงสคริปต์กับ OpenVPN เพื่อให้ทำงานได้เมื่อเชื่อมต่อ VPN สำเร็จหรือไม่
network-manger-openvpn
เสื้อคลุม
คำตอบ:
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
โดยตรง เมื่อตั้งค่าเซิร์ฟเวอร์ฉันสังเกตเห็นว่า OpenVPN จะพยายามเชื่อมต่อใหม่เมื่อเซิร์ฟเวอร์หยุดทำงาน ไม่แน่ใจว่า OpenVPN ยังคงพยายามต่อไปเมื่อส่วนต่อประสานเครือข่ายของคุณหยุดทำงาน
สำหรับคำถาม: "ฉันจะเชื่อมโยงสคริปต์กับ OpenVPN เพื่อให้ทำงานได้อย่างไรเมื่อเชื่อมต่อ VPN สำเร็จ" ผมอยากจะชี้ให้เห็นว่าLekensteynให้ดีเยี่ยมคำตอบ แต่ในขณะที่คำตอบของเขาถูกแต่งขึ้นมันขาดความชัดเจนเล็กน้อยว่าอาร์กิวเมนต์ของบรรทัดรับคำสั่ง openvpn ควรถูกจัดเตรียมเพื่อเริ่ม 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 openvpn
cond-restart,force-reload,reload, restart,soft-restart, start, status, stop
ในฐานะที่เป็นด้ายเก่าฉันไม่แน่ใจว่ายังคงสนใจ หากคุณยังต้องการใช้ NetworkManager เพื่อเชื่อมต่อกับ VPN คุณสามารถเพิ่มกฎ udev แบบง่าย ๆ เช่นนี้:
KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"
สิ่งนี้ควรเรียกใช้สคริปต์ใด ๆ หลังจากสร้าง VPN
ฉันสะดุดกับคำตอบในการวิจัยของฉันเพื่อแก้ไขปัญหานี้และฉันพบว่าทางออกที่ดีที่สุดคือ (ใช้เซิร์ฟเวอร์ 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>