ในบทความนี้ เราจะพิจารณาการติดตั้งและการกำหนดค่าของ OpenVPN เซิร์ฟเวอร์ที่ใช้ Linux CentOS/RHEL (7/8) และแสดงวิธีเชื่อมต่อคอมพิวเตอร์ระยะไกลสองเครื่อง (หรือสำนักงาน) หลัง NAT ในเครือข่ายเดียวโดยใช้เซิร์ฟเวอร์ OpenVPN ที่กำหนดค่าไว้ ไคลเอนต์ VPN จะได้รับการตรวจสอบสิทธิ์โดยใช้ใบรับรอง
VPN เป็นชุดของเทคโนโลยีที่อนุญาตให้สร้างเครือข่ายที่ปลอดภัยบนเครือข่ายสาธารณะหรืออินเทอร์เน็ต เมื่อใช้ VPN คุณจะเชื่อมต่ออุปกรณ์หรือเครือข่ายต่างๆ ลงในเครือข่ายท้องถิ่นที่ปลอดภัยเพียงเครือข่ายเดียวทางอินเทอร์เน็ตได้
OpenVPN เป็นหนึ่งในการนำเทคโนโลยี VPN แบบโอเพ่นซอร์สที่ใช้ SSL/TLS ไปใช้โดยอิงจาก OpenSSL เมื่อใช้ OpenVPN คุณสามารถเชื่อมต่อทั้งสำนักงานระยะไกลและคอมพิวเตอร์แต่ละเครื่องที่อยู่เบื้องหลังอุปกรณ์ NAT ลงในเครือข่ายเดียว
ติดตั้ง OpenVPN และ Easy-RSA
ในขั้นตอนแรก คุณต้องเชื่อมต่อที่เก็บ EPEL และอัปเดตโฮสต์ของคุณ:
# yum install epel-release -y
# yum update -y
หลังจากที่ระบบอัปเดตแล้ว ให้ติดตั้ง OpenVPN และ Easy-RSA ใช้ตัวจัดการแพ็คเกจ yum (เราจำเป็นต้องใช้เพื่อใช้งานโครงสร้างพื้นฐานคีย์ PKI บนเซิร์ฟเวอร์ VPN)
# yum install openvpn easy-rsa -y
จะกำหนดค่า Easy-RSA และสร้างใบรับรอง X.509 ได้อย่างไร
คัดลอกทั้งหมด easy-rsa สคริปต์ไปยัง /etc/openvpn/ :
# cp -r /usr/share/easy-rsa /etc/openvpn/
ไปที่ /etc/openvpn/easy-rsa/3/ และสร้าง vars ไฟล์ที่นั่น:
# cd /etc/openvpn/easy-rsa/3/
# nano vars
เพิ่มเนื้อหาไฟล์ (คุณสามารถแก้ไขการกำหนดค่าตามความต้องการของคุณ):
set_var EASYRSA "$ PWD" set_var EASYRSA_PKI "$ EASYRSA / PKI" set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "DE" set_var EASYRSA_REQ_PROVINCE "MUN" EASYRSA_REQ_CITY set_var "โดย" set_var EASYRSA_REQ_ORG "WOSHUB" set_var EASYRSA_REQ_EMAIL "[email protected] "set_var EASYRSA_REQ_OU "ไอที DEPT" set_var EASYRSA_KEY_SIZE 4096set_var EASYRSA_ALGO rsaset_var EASYRSA_CA_EXPIRE 7500set_var EASYRSA_CERT_EXPIRE 3650set_var EASYRSA_NS_SUPPORT "ไม่" set_var EASYRSA_NS_COMMENT "Certificate Authority" set_var EASYRSA_EXT_DIR "$ EASYRSA / x509 ประเภท" EASYRSA_SSL_CONF set_var "$ EASYRSA / OpenSSL-1.0.cnf" EASYRSA_DIGEST set_var "sha512"
คุณสามารถระบุข้อมูลใดๆ ในไฟล์ได้ โดยจะไม่ส่งผลต่อการกำหนดค่าและการทำงานเพิ่มเติมของเซิร์ฟเวอร์
ไฟล์จะต้องสามารถเรียกใช้งานได้ ดังนั้นให้รัน:
# chmod +x vars
สร้างใบรับรองและคีย์ OpenVPN
ก่อนสร้างคีย์ ให้เริ่มต้น PKI ไดเร็กทอรีและสร้าง CA คีย์# cd /etc/openvpn/easy-rsa/3/
# ./easyrsa init-pki
หมายเหตุ:การใช้การกำหนดค่า Easy-RSA จาก:./varsinit-pki เสร็จสมบูรณ์; ขณะนี้คุณสามารถสร้าง CA หรือคำขอได้ PKI dir ที่คุณสร้างขึ้นใหม่คือ:/etc/openvpn/easy-rsa/3/pki
สร้าง CA คีย์:
# ./easyrsa build-ca
หลังจากรันคำสั่ง คุณจะต้องป้อนรหัสผ่านเพื่อสร้างคีย์และใบรับรอง คุณจะต้องใช้รหัสผ่านในภายหลังเพื่อลงนามในใบรับรอง
สร้างคีย์เซิร์ฟเวอร์ (ชื่อเซิร์ฟเวอร์คือ vpn.woshub.com ):
ไม่ผ่าน ตัวเลือกปิดการใช้งานรหัสผ่าน
# ./easyrsa gen-req vpn.woshub.com nopass
หมายเหตุ:การใช้การกำหนดค่า Easy-RSA จาก:./varsUsing SSL:openssl OpenSSL 1.0.2k-fips 26 ม.ค. 2017กำลังสร้างคีย์ส่วนตัว RSA 4096 บิต................ ........++เขียนไพรเวทคีย์ใหม่ไปที่ '/etc/openvpn/easy-rsa/3/pki/private/vpn.woshub.com.key.R4IYCbD1zP'----คุณกำลังจะ จะถูกขอให้ป้อนข้อมูลที่จะรวมไว้ในคำขอใบรับรองของคุณสิ่งที่คุณกำลังจะป้อนคือสิ่งที่เรียกว่าชื่อเฉพาะหรือ DN มีฟิลด์ค่อนข้างน้อย แต่คุณสามารถเว้นว่างไว้ได้สำหรับบางฟิลด์จะมีค่าเริ่มต้น ,หากคุณป้อน '.' ฟิลด์จะเว้นว่างไว้ -----ชื่อทั่วไป (เช่น:ผู้ใช้ โฮสต์ หรือชื่อเซิร์ฟเวอร์ของคุณ) [vpn.woshub.com]:คำขอคู่คีย์และใบรับรองเสร็จสมบูรณ์ ไฟล์ของคุณคือ:req:/etc/openvpn/easy-rsa/3/pki/reqs/vpn.woshub.com.reqkey:/etc/openvpn/easy-rsa/3/pki/private/vpn.woshub.com กุญแจ
เมื่อออกใบรับรอง ให้กด Enter ในคอลัมน์ชื่อสามัญ
ลงนามคีย์ vpn.woshub.com โดยใช้ใบรับรอง CA ของเรา:
# ./easyrsa sign-req server vpn.woshub.com
ในการลงนามในใบรับรอง เราจะต้องมีรหัสผ่านที่เราตั้งไว้เมื่อออก CA ใบรับรอง:
ดังที่แสดงในภาพหน้าจอ คุณจะต้องป้อน ใช่ และ CA รหัสผ่านอยู่ระหว่างดำเนินการ
เพื่อให้แน่ใจว่ามีการสร้างใบรับรองโดยไม่มีข้อผิดพลาด ให้เรียกใช้คำสั่งนี้:
# openssl verify -CAfile pki/ca.crt pki/issued/vpn.woshub.com.crt
pki/issued/vpn.woshub.com.crt:ตกลง
สร้างใบรับรองเซิร์ฟเวอร์ OpenVPN ทั้งหมดแล้ว
- ใบรับรองหลัก
pki/ca.crt
- คีย์เซิร์ฟเวอร์ส่วนตัว
pki/private/vpn.woshub.com.key
- ใบรับรองเซิร์ฟเวอร์
pki/issued/vpn.woshub.com.crt
ในการสร้างคีย์ไคลเอ็นต์ ให้รันคำสั่งต่อไปนี้:
# ./easyrsa gen-req client_name nopass
มาสร้าง admin1 . กันเถอะ รหัสลูกค้า:# ./easyrsa gen-req admin1 nopass
หมายเหตุ:ใช้การกำหนดค่า Easy-RSA จาก:./varsUsing SSL:openssl OpenSSL 1.0.2k-fips 26 ม.ค. 2017การสร้างคีย์ส่วนตัว RSA 4096 บิต..........++เขียนคีย์ส่วนตัวใหม่ไปยัง '/etc/openvpn/easy-rsa/3/pki/private/admin1.key.R5OY6reT2e'----- คุณจะถูกขอให้ป้อนข้อมูลที่จะรวมอยู่ในคำขอใบรับรองของคุณ สิ่งที่คุณกำลังจะป้อน คือสิ่งที่เรียกว่า Distinguished Name หรือ DN มีบางฟิลด์ค่อนข้างน้อย แต่คุณสามารถเว้นว่างไว้ได้ สำหรับบางฟิลด์จะมีค่าเริ่มต้น หากคุณป้อน '.' ฟิลด์จะเว้นว่างไว้ ---- -ชื่อทั่วไป (เช่น:ชื่อผู้ใช้ โฮสต์ หรือเซิร์ฟเวอร์ของคุณ) [admin1]:คำขอคู่คีย์และใบรับรองเสร็จสมบูรณ์ ไฟล์ของคุณคือ:req:/etc/openvpn/easy-rsa/3/pki/reqs/admin1.reqkey:/etc/openvpn/easy-rsa/3/pki/private/admin1.key
คุณต้องเซ็นชื่อโดยใช้ใบรับรอง CA เช่นรหัสเซิร์ฟเวอร์:
# ./easyrsa sign-req client admin1
สร้างใบรับรองสำหรับผู้ใช้แล้ว
นอกจากนี้ คุณต้องสร้างคีย์ Diffie-Hellman เพื่อใช้ในการแลกเปลี่ยนคีย์:
# ./easyrsa gen-dh
ต้องใช้เวลาในการสร้าง:
จากนั้นสร้างใบรับรอง TSL:
# openvpn --genkey --secret ta.key
หากในภายหลังเราจะเพิกถอนใบรับรองไคลเอ็นต์ เราต้องสร้างคีย์ CRL:
# ./easyrsa gen-crl
หมายเหตุ:การใช้การกำหนดค่า Easy-RSA จาก:./varsUsing SSL:openssl OpenSSL 1.0.2k-fips 26 ม.ค. 2017การใช้การกำหนดค่าจาก /etc/openvpn/easy-rsa/3/pki/safessl-easyrsa.cnfEnter pass phrase for /etc/openvpn/easy-rsa/3/pki/private/ca.key:สร้าง CRL ที่อัปเดตแล้ว ไฟล์ CRL:/etc/openvpn/easy-rsa/3/pki/crl.pem
หากต้องการเพิกถอนใบรับรอง ให้เรียกใช้คำสั่งนี้:
./easyrsa revoke admin1
— โดยที่ admin1 เป็นชื่อใบรับรอง
สร้างใบรับรองที่จำเป็นแล้ว ตอนนี้คัดลอกไปยังไดเรกทอรีงาน
นี่คือใบรับรองเซิร์ฟเวอร์:
# cp pki/ca.crt /etc/openvpn/server/
# cp pki/issued/vpn.woshub.com.crt /etc/openvpn/server/
# cp pki/private/vpn.woshub.com.key /etc/openvpn/server/
# cp pki/private/dh.pem /etc/openvpn/server/
# cp pki/private/ta.key /etc/openvpn/server/
# cp pki/crl.pem /etc/openvpn/server/
นี่คือใบรับรองไคลเอ็นต์:
# cp pki/issued/admin1.crt /etc/openvpn/client/
# cp pki/private/admin1.key /etc/openvpn/client/
ไฟล์การกำหนดค่าเซิร์ฟเวอร์ OpenVPN กฎไฟร์วอลล์
ไปที่การตั้งค่าของไฟล์การกำหนดค่า OpenVPN กัน ก่อนอื่น สร้างไฟล์การกำหนดค่า OpenVPN server.conf :
# cd /etc/openvpn/ && nano server.conf
เปลี่ยนเนื้อหาไฟล์ดังนี้:
# ระบุพอร์ต โปรโตคอล และ deviceport 1194proto udpdev tun# ระบุพาธไปยังเซิร์ฟเวอร์ certificatesca /etc/openvpn/server/ca.crtcert /etc/openvpn/server/vpn.woshub.com.crtkey /etc/openvpn /server/vpn.woshub.com.key# เส้นทางไปยังคีย์ CRL และ DHdh /etc/openvpn/server/dh.pemcrl-verify /etc/openvpn/server/crl.pem# ระบุการตั้งค่า IP ของเครือข่าย VPN ไคลเอนต์จะ รับที่อยู่จากเซิร์ฟเวอร์ 10.1.2.0 255.255.255.0push "redirect-gateway def1"# ระบุ DNS serverspush "dhcp-option DNS 8.8.8.8"push "dhcp-option DNS 8.8.4.4"# อนุญาตการเชื่อมต่อกับไคลเอนต์ที่แตกต่างกันด้วยเหมือนกัน keyduplicate-cn# TLS protectiontls-auth /etc/openvpn/server/ta.key 0cipher AES-256-CBCtls-version-min 1.2tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS- DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256auth SHA512auth-nocache# อื่นๆ รายละเอียดการกำหนดค่าkeepalive 20 60persist-keypersist-tuncomp-lzo yesdaemonuserไม่มีใครกลุ่มไม่มีใคร# เส้นทางไปยัง the log filelog-append /var/log/openvpn.logverb 3
จากนั้นบันทึกไฟล์. ฉันได้ระบุพอร์ต UDP เริ่มต้น 1194 สำหรับเซิร์ฟเวอร์ VPN ของฉันแล้ว แต่คุณสามารถระบุพอร์ตว่างบนเซิร์ฟเวอร์ของคุณสำหรับ OpenVPN ของคุณได้
ตอนนี้ คุณเพียงแค่ต้องตั้งกฎไฟร์วอลล์เพื่ออนุญาตการเชื่อมต่อและการกำหนดเส้นทางระหว่างเซ็กเมนต์
หากคุณกำลังใช้ firewalld ให้เปิดใช้งาน การส่งต่อ โมดูลเคอร์เนลก่อน:
# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
# sysctl -p
net.ipv4.ip_forward =1
เพิ่มบริการ openvpn ให้กับ firewalld และ tun0 อินเทอร์เฟซไปยังโซนที่เชื่อถือได้:
# firewall-cmd --permanent --add-service=openvpn
# firewall-cmd --permanent --zone=trusted --add-interface=tun0
เปิดใช้งาน 'MASQUERADE' สำหรับโซนที่เชื่อถือได้ของไฟร์วอลล์:# firewall-cmd --permanent --zone=trusted --add-masquerade
เปิดใช้งาน NAT:
# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.1.2.0/24 -o Server_IP -j MASQUERADE
# firewall-cmd –reload
# iptables -t nat -A POSTROUTING -s 10.1.2.0/24 -o eth0 -j MASQUERADE
# iptables -A INPUT -p udp –dport 1194 -j ACCEPT
# service iptables save
เรียกใช้บริการ OpenVPN และเพิ่มในการเริ่มต้น:
# systemctl start openvpn@server
# systemctl enable openvpn@server
ตรวจสอบให้แน่ใจว่าพอร์ต udp\1194 กำลังฟังโดยบริการ openvpn:
# lsof -i:1194
คำสั่ง PID ผู้ใช้ FD ประเภทอุปกรณ์ ขนาด/ปิด ชื่อโหนดopenvpn 12327 ไม่มีคน 5u IPv4 45122 0t0 UDP *:openvpn
ตรวจสอบการตั้งค่า IP ของอินเทอร์เฟซเครือข่าย:
# ip a
อย่างที่คุณเห็น เครือข่ายที่ระบุระหว่างการกำหนดค่าจะถูกเพิ่มไปยัง tun0 อุปกรณ์
นี่คือการตั้งค่าขั้นต่ำเพื่อให้ OpenVPN ของคุณทำงานได้
จะเชื่อมต่อหลายสำนักงาน (คอมพิวเตอร์) โดยใช้ OpenVPN ได้อย่างไร
มาดูวิธีเชื่อมต่อกับเซิร์ฟเวอร์ OpenVPN จากคอมพิวเตอร์ระยะไกลสองเครื่องที่มีการเข้าถึงอินเทอร์เน็ตผ่าน NAT และรวมเข้าด้วยกันเป็นเครือข่ายเดียว ในการเชื่อมต่อจากคอมพิวเตอร์ที่ใช้ Windows กับเซิร์ฟเวอร์ OpenVPN ฉันใช้ไคลเอนต์อย่างเป็นทางการ คุณสามารถดาวน์โหลดได้จากเว็บไซต์อย่างเป็นทางการ แต่เราจะไม่อธิบายโดยละเอียด และไปที่การกำหนดค่าโดยตรง
หลังจากที่คุณได้ติดตั้งไคลเอนต์แล้ว ไปที่การสร้างไฟล์การกำหนดค่าที่นี่:
C:\Program Files\OpenVPN\config\
ฉันได้สร้างไฟล์ที่มีชื่อไคลเอนต์และเพิ่มเนื้อหาต่อไปนี้:
clientdev tunproto udpremote 112.113.114.15 1194resolv-retry infinitenobindblock-outside-dnspersist-keypersist-tunmute-replay-warningsremote-cert-tls servertls-clientauth SHA512tls-auth "C:\\Program Files\\Open\VPN ta.key" 1remote-cert-eku "TLS Web Server Authentication"ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"cert "C:\\Program Files\\OpenVPN\\config\ \admin1.crt"key "C:\\Program Files\\OpenVPN\\config\\admin1.key"cipher AES-256-CBCcomp-lzoverb 3
ในการกำหนดค่า เราต้องการใบรับรองไคลเอ็นต์ ความปลอดภัย และเซิร์ฟเวอร์ที่เราสร้างไว้ก่อนหน้านี้ คุณต้องดาวน์โหลดจากเซิร์ฟเวอร์ของคุณและวางลงในโฟลเดอร์ในเครื่อง จากนั้นระบุเส้นทางไปยังไฟล์การกำหนดค่าไคลเอนต์ OpenVPN
จากนั้นคุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์โดยคลิกที่ไอคอน OpenVPN ในถาด:
ฉันได้เชื่อมต่อและได้รับที่อยู่ IP ต่อไปนี้สำหรับอุปกรณ์ของฉัน:
ที่อยู่ IPv4 . . . . . . . . . . . :10.1.2.14 ซับเน็ตมาสก์ . . . . . . . . . :255.255.255.0
บนคอมพิวเตอร์เครื่องที่สองหลัง NAT ฉันดำเนินการแบบเดียวกันและสร้างใบรับรองสำหรับผู้ใช้คนที่สองล่วงหน้า หลังจากเชื่อมต่อ พีซีเครื่องที่สองยังได้รับที่อยู่ IP จากเครือข่าย VPN:
ที่อยู่ IPv4 . . . . . . . . . . . :10.1.2.16 ซับเน็ตมาสก์ . . . . . . . . . :255.255.255.0
หลังจากเชื่อมต่อแล้ว คอมพิวเตอร์ทั้งสองเครื่องจะอยู่ในเครือข่ายเดียวกันและมองเห็นกันและกัน
ปิงพีซีเครื่องที่สอง:
ส่ง Ping 10.1.2.16 ด้วยข้อมูล 32 ไบต์:ตอบกลับตั้งแต่ 10.1.2.16:ไบต์=32 เวลา=73ms TTL=127
ปิงบนพีซีเครื่องแรก:
ส่ง Ping 10.1.2.14 ด้วยข้อมูล 32 ไบต์:ตอบกลับตั้งแต่ 10.1.2.14:ไบต์=32 เวลา=79ms TTL=127
ไคลเอนต์ VPN ที่เชื่อมต่อทั้งสองสามารถส่งแพ็กเก็ตและถ่ายโอนไฟล์ถึงกันโดยตรง ดังนั้น เราสามารถรวมอุปกรณ์สองเครื่องที่อยู่ในสถานที่ต่างๆ ของประเทศไว้ในเครือข่ายท้องถิ่นเดียว
คุณสามารถสร้างคีย์หรือใบรับรองจำนวนเท่าใดก็ได้สำหรับผู้ใช้บนเซิร์ฟเวอร์ OpenVPN ของคุณ หากคุณต้องการใบรับรองใหม่ ให้รันคำสั่งเหล่านี้สำหรับ /etc/openvpn/easy-rsa/3:
# ./easyrsa gen-req clientname nopass
# ./easyrsa sign-req client clientname
อย่าลืมเพิกถอนใบรับรองไคลเอ็นต์หากไม่ได้ใช้เพื่อรักษาเครือข่ายของคุณให้ปลอดภัย