สร้างโปรไฟล์ OpenVPN เพื่อให้ผู้ใช้ไคลเอ็นต์นำเข้า


40

มีเอกสารหรือทรัพยากรใด ๆ ที่อธิบายถึงวิธีการสร้างและโฮสต์โปรไฟล์สำหรับไคลเอนต์ OpenVPN เพื่อนำเข้าหรือไม่? เป็นการดีที่ต้องการให้ผู้ใช้ของฉันไม่จำเป็นต้องดึงไฟล์. zip ของ. vpn + certs แยกออกจากกันไปยังไดเรกทอรีที่ถูกต้องปรับแต่ง. vpn ของพวกเขา ฯลฯ

คำตอบ:


40

เห็นได้ชัดว่าตั้งแต่ OpenVPN 2.1 รองรับการกำหนดค่าแบบอินไลน์ ช่วยให้คุณค้นหาตำแหน่งคีย์และคีย์ทั้งหมดในไฟล์กำหนดค่าเดียว แต่เอกสารเกี่ยวกับวิธีสร้างไฟล์การกำหนดค่านี้ไม่ได้ถูกเพิ่มไว้จนกว่าจะมีการเปิดตัว 2.3 รุ่นล่าสุด

ดูINLINE FILE SUPPORTส่วนของหน้าคน OpenVPNสำหรับข้อมูลเพิ่มเติม

client
proto udp
remote openvpnserver.example.com
port 1194
dev tun
nobind

key-direction 1

<ca>
-----BEGIN CERTIFICATE-----
# insert base64 blob from ca.crt
-----END CERTIFICATE-----
</ca>

<cert>
-----BEGIN CERTIFICATE-----
# insert base64 blob from client1.crt
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
# insert base64 blob from client1.key
-----END PRIVATE KEY-----
</key>

<tls-auth>
-----BEGIN OpenVPN Static key V1-----
# insert ta.key
-----END OpenVPN Static key V1-----
</tls-auth>

เอกสารสำหรับไฟล์กำหนดค่าจะเหมือนกับเอกสารสำหรับตัวเลือกบรรทัดคำสั่ง:

OpenVPN อนุญาตให้วางตัวเลือกใดก็ได้บนบรรทัดคำสั่งหรือในไฟล์กำหนดค่า แม้ว่าตัวเลือกบรรทัดคำสั่งทั้งหมดจะถูกนำหน้าด้วย double-Leading-dash ("-") คำนำหน้านี้สามารถลบออกได้เมื่อมีการวางตัวเลือกไว้ในไฟล์กำหนดค่า


ไม่สามารถใช้งานได้กับ Windows Connect Client ( openvpn.net/?option=com_content&id=357 ) มันบ่นเกี่ยวกับสิ่งที่ชอบCould not read file C:\\...\[inline]ดังนั้นจึงดูเหมือนว่าลูกค้าไม่ทราบเกี่ยวกับใบรับรองแบบอินไลน์ (ยัง)
Patrick Oscity

ไม่ทราบว่าช่วยได้หรือไม่ แต่ฉันเพิ่งปล่อยค่า ca, cert, key และ tls-auth ออกมาและใช้งานได้
Ikke

2
คุณควรลบบรรทัดด้วย [inline] แทนที่จะเป็น tls-auth [inline] 1 คุณควรใช้ tls-direction 1
plaisthos

2
ขออภัยมันเป็นทิศทางสำคัญ 1. มีความสับสน แพทช์ของฉันไปยังหน้า man ได้ถูกรวมเข้าด้วยกันแล้ว ดูหน้าคน 2.3 ภายใต้ INLINE Files: community.openvpn.net/openvpn/wiki/Openvpn23ManPage ฉันคัดลอกไปยังคำตอบของตัวเองเพื่อให้สามารถอ่านและเข้าถึงได้
plaisthos

1
@Stububbl: ดูขั้นตอนที่ 10 และ 11 ของลิงค์นี้ digitalocean.com/community/tutorials/…
Sai Ramachandran

8

จากหน้า manของ OpenVPN 2.3 (รองรับตั้งแต่ 2.1rc-something):

OpenVPN อนุญาตให้รวมไฟล์ในการกำหนดค่าหลักสำหรับ--ca, --cert, --dh, --extra-certs, --key, --pkcs12, --secretและ--tls-authตัวเลือก

ไฟล์แบบอินไลน์ที่ตั้งขึ้นโดยแต่ละสายและจบลงด้วยเส้น<option></option>

นี่คือตัวอย่างของการใช้ไฟล์อินไลน์

<cert>
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
</cert>

เมื่อใช้คุณสมบัติไฟล์แบบอินไลน์กับ--pkcs12ไฟล์แบบอินไลน์จะต้องมีการเข้ารหัส base64 การเข้ารหัสไฟล์. p12 ลงใน base64 สามารถทำได้เช่นกับ OpenSSL โดยการรันopenssl base64 -in input.p12

ยังหมายเหตุkey-directionตัวเลือก:

--key-direction
วิธีอื่นในการระบุพารามิเตอร์ทิศทางที่เป็นทางเลือกสำหรับ --tls-auth และ --secretตัวเลือก มีประโยชน์เมื่อใช้ไฟล์อินไลน์ (ดูหัวข้อไฟล์อินไลน์)


3

สิ่งนี้ได้รับการทดสอบกับ OpenVPN 2.3.4 เซิร์ฟเวอร์ Debian 8.9 กับไคลเอนต์ Win7

ขั้นตอนที่ 1 สร้างไฟล์ที่มีค่าเริ่มต้นของคุณ (ฉันเรียกว่า inline_client.conf) การตั้งค่าทั้งหมดจะต้องตรงกับค่า server.conf ของคุณ

client
dev tun
proto udp
remote yourserver.xyz 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
remote-cert-tls server
cipher AES-256-CBC
comp-lzo
verb 3
;mute 20

ca [inline]
cert [inline]
key [inline]
tls-auth [inline] 1

ขั้นตอนที่ 2 สร้างสคริปต์ต่อไปนี้ปรับเส้นทางตามต้องการและ chmod ug+x MakeInline.sh

#!/bin/bash

# Default Variable Declarations

DEFAULT="inline_client.conf"
FILEEXT=".ovpn"
CRT=".crt"
KEY=".key"
CA="ca.crt"
TA="ta.key"
kPath="./keys/"


#Ask for a Client name
echo "Please enter an existing Client Name:"
read NAME

echo "Please enter an Name for the output file"
read ovpnName

#1st Verify that client's Public Key Exists
if [ ! -f $kPath$NAME$CRT ]; then
   echo "[ERROR]: Client Public Key Certificate not found: $kPath$NAME$CRT"
   exit
fi
echo "Client's cert found: $kPath$NAME$CRT"

#Then, verify that there is a private key for that client
if [ ! -f $kPath$NAME$KEY ]; then
   echo "[ERROR]: Client 3des Private Key not found: $kPath$NAME$KEY"
   exit
fi
echo "Client's Private Key found: $kPath$NAME$KEY"

#Confirm the CA public key exists
if [ ! -f $kPath$CA ]; then
   echo "[ERROR]: CA Public Key not found: $kPath$CA"
   exit
fi
echo "CA public Key found: $kPath$CA"

#Confirm the tls-auth ta key file exists
if [ ! -f $kPath$TA ]; then
   echo "[ERROR]: tls-auth Key not found: $kPath$TA"
   exit
fi
echo "tls-auth Private Key found: $kPath$TA"

#Ready to make a new .opvn file - Start by populating with the

cat $DEFAULT > $ovpnName$FILEEXT

#Now, append the CA Public Cert
echo "<ca>" >> $ovpnName$FILEEXT
cat $kPath$CA | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> $ovpnName$FILEEXT
echo "</ca>" >> $ovpnName$FILEEXT

#Next append the client Public Cert
echo "<cert>" >> $ovpnName$FILEEXT
cat $kPath$NAME$CRT | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> $ovpnName$FILEEXT
echo "</cert>" >> $ovpnName$FILEEXT

#Then, append the client Private Key
echo "<key>" >> $ovpnName$FILEEXT
cat $kPath$NAME$KEY >> $ovpnName$FILEEXT
echo "</key>" >> $ovpnName$FILEEXT

#Finally, append the TA Private Key
echo "<tls-auth>" >> $ovpnName$FILEEXT
cat $kPath$TA >> $ovpnName$FILEEXT
echo "</tls-auth>" >> $ovpnName$FILEEXT

echo "Done! $ovpnName$FILEEXT Successfully Created."

#Script written by Eric Jodoin
#Update by Eric Maasdorp 2017-12-16

ขั้นตอนที่ 3 ดำเนินการก็จะขอชื่อของลูกค้าที่คุณจำเป็นต้องได้สร้างไว้แล้วด้วยMakeInline.sh build-key or build-key-passมันจะขอชื่อสำหรับไฟล์ ovpn มาตรฐานของฉันคือ ServerToConnectTo.ClientName ซึ่งจะผลิต ServerToConnectTo.ClientName.ovpn

หมายเหตุ: หากคุณใช้build-keyแทนbuild-key-passใครก็ตามที่ได้รับการระงับ*.ovpnจะสามารถเข้าถึงเซิร์ฟเวอร์ของคุณได้โดยไม่ต้องใช้รหัสผ่าน!


1

สคริปต์ Python นี้สามารถเรียกใช้บนเซิร์ฟเวอร์เพื่อสร้างคีย์ไคลเอ็นต์และโปรไฟล์ ฉันต้องการแบบอินไลน์ แต่มันไม่ใช่การสร้างของฉันและมีความยาวและอาจได้รับการอัปเดตเป็นระยะและมีส้อมสำหรับมันดังนั้นอัตราต่อรองที่จะสามารถค้นหาได้บนเว็บสำหรับนักเดินทางเว็บในอนาคต หากลิงก์ไม่ทำงานให้ลองค้นหา "openvpn_gen.py"

https://gist.github.com/Justasic/908ef5f4fa162f15b3b8

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