ไม่สามารถเชื่อมต่อกับ OpenVPN นอก LAN


0

ฉันตั้งค่า OpenVPN ไว้หลังเราเตอร์และพอร์ตที่ส่งต่อ1194แล้ว VPN ใช้ซับเน็ต10.3.15.0/24และมี192.168.1.14บน LAN

มันทำงานได้เมื่อฉันเชื่อมต่อในพื้นที่หรือจากเครือข่ายในบ้านของฉันเชื่อมต่อกับ IP สาธารณะ แต่ไม่ใช่ในเครือข่ายอื่นที่ฉันได้ลอง

ฉันไม่สามารถสร้างการเชื่อมต่อกับ VPN และบนไคลเอนต์ที่ฉันได้รับ:

Mon Apr 20 13:50:42 2015 UDPv4 link local: [undef]
Mon Apr 20 13:50:42 2015 UDPv4 link remote: [AF_INET]83.***.***.***:1194
Mon Apr 20 13:51:42 2015 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Mon Apr 20 13:51:42 2015 TLS Error: TLS handshake failed
Mon Apr 20 13:51:42 2015 SIGUSR1[soft,tls-error] received, process restarting
Mon Apr 20 13:51:42 2015 Restart pause, 2 second(s)

ฉันคิดว่าอาจเป็นปัญหาไฟร์วอลล์ซึ่งมาจาก iptables ของฉัน:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  10.3.15.0/24         anywhere             ctstate NEW

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

แต่ฉันพยายามล้างตารางซึ่งไม่ได้ผล และเมื่อทำงานtcpdump -qni any port 1194มีการสื่อสารบางอย่าง (ในทั้งสองกรณี):

13:44:35.936684 IP 194.***.***.****.53929 > 192.168.1.14.1194: UDP, length 14
13:44:41.043704 IP 194.***.***.****.22955 > 192.168.1.14.1194: UDP, length 14
13:44:43.063426 IP 194.***.***.****.22955 > 192.168.1.14.1194: UDP, length 14
13:44:43.544690 IP 194.***.***.****.53929 > 192.168.1.14.1194: UDP, length 14

ฉันยังสังเกตเห็นบางอย่างเกี่ยวกับdestination port unreachableแต่ข้อผิดพลาดเหล่านั้นหายไป

นี่คือการกำหนดค่าเซิร์ฟเวอร์ของฉัน:

port 1194
proto udp
dev tun

ca openvpn_certs/host-ca.pem
cert openvpn_certs/host-cert.pem
key openvpn_certs/host-key.pem
dh openvpn_certs/dh1024.pem

server 10.3.15.0 255.255.255.0
route 10.3.15.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "redirect-gateway def1 bypass-dhcp"
push "remote-gateway 10.3.15.1"

client-to-client
max-clients 20

keepalive 10 120
comp-lzo

user nobody
group nobody

persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log

verb 11

นี่คือการกำหนดค่าไคลเอนต์ของฉัน:

client
dev vpn
dev-type tun
proto udp
remote server.remote 1194
resolv-retry infinite
nobind
ns-cert-type server
persist-key
persist-tun
pull
ca certs/ca-host.pem
cert certs/cert-local.pem
key certs/key-local.pem
comp-lzo
verb 11

เซิร์ฟเวอร์รัน Alpine linux ในขณะที่ไคลเอนต์ใช้ Gentoo

ฉันติดอยู่และไม่มีความคิดว่าจะดูความคิดหรือคำแนะนำใด ๆ

ขอบคุณ!


คุณตั้งค่ากุญแจได้อย่างไร? ฉันอยากจะแนะนำต่อไปนี้คู่มือนี้ คุณสามารถโพสต์บันทึก openvpn จากเซิร์ฟเวอร์ได้หรือไม่
hololeap

คำตอบ:


1

ก่อนอื่นฉันไม่แน่ใจว่าคุณใช้ OpenVPN เวอร์ชันใด แต่ 'remote-gateway' ไม่ใช่ตัวเลือกที่ถูกต้องใน v2.3.2 หากคุณใช้รุ่นเก่ากว่าให้ตรวจสอบหน้าคนท้องถิ่นของคุณแล้วลบคำสั่งนั้นหากจำเป็น


ตามวิกิพีเดียของ OpenVPNข้อผิดพลาด "การเจรจาคีย์ TLS ล้มเหลว ... " มักเป็นผลมาจาก:

  1. ไฟร์วอลล์ในขอบเขตบนเครือข่ายของเซิร์ฟเวอร์กำลังกรองแพ็กเก็ต OpenVPN ขาเข้า (โดยค่าเริ่มต้น OpenVPN จะใช้ UDP หรือหมายเลขพอร์ต TCP 1194)

    • สิ่งนี้ไม่น่าเป็นไปได้ในกรณีของคุณ แต่ตรวจสอบไฟร์วอลล์ของเราเตอร์ของคุณเพื่อให้แน่ใจ
  2. ไฟร์วอลล์ซอฟต์แวร์ที่ทำงานบนเครื่องเซิร์ฟเวอร์ OpenVPN นั้นกำลังกรองการเชื่อมต่อขาเข้าบนพอร์ต 1194

    • ตารางตัวกรองที่คุณระบุไว้นั้นดูดีโดยปกติคุณจะมีนโยบาย INPUT เริ่มต้นที่จะยอมรับ มิฉะนั้นคุณต้องอนุญาตให้พอร์ต UDP 1194:

      iptables -A INPUT -p udp -m udp --dport 1194 -j ACCEPT
      
  3. เกตเวย์ NAT บนเครือข่ายของเซิร์ฟเวอร์ไม่มีกฎการส่งต่อพอร์ตสำหรับ TCP / UDP 1194 ไปยังที่อยู่ภายในของเครื่องเซิร์ฟเวอร์ OpenVPN

  4. การกำหนดค่าไคลเอนต์ OpenVPN ไม่มีที่อยู่เซิร์ฟเวอร์ที่ถูกต้องในไฟล์กำหนดค่า รีโมตไดเรกทีฟในไฟล์กำหนดค่าไคลเอนต์จะต้องชี้ไปที่เซิร์ฟเวอร์เองหรือที่อยู่ IP สาธารณะของเกตเวย์เครือข่ายเซิร์ฟเวอร์

  5. ไฟร์วอลล์ Windows กำลังบล็อกการเข้าถึงสำหรับไบนารี openvpn.exe คุณอาจต้องรายการที่อนุญาต (เพิ่มลงในรายการ "ข้อยกเว้น") เพื่อให้ OpenVPN ทำงานได้


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

cp vars.example vars
editor ./vars

บนระบบ CA ให้ยกเลิกการใส่เครื่องหมายข้อคิดเห็นและแก้ไขฟิลด์องค์กร (EASYRSA_REQ_COUNTRY ฯลฯ ) บนเซิร์ฟเวอร์เลือกเปลี่ยน "set_var EASYRSA_PKI" เพื่อให้ชี้ไปยังตำแหน่งที่เหมาะสม (เช่น / etc / openvpn / pki)

สร้างการร้องขอใบรับรองบนเซิร์ฟเวอร์:

./easyrsa init-pki
./easyrsa gen-req <your_server_name> nopass
./easyrsa gen-req <some_client_name> nopass

บนไม่ใช่เซิร์ฟเวอร์สร้าง CA ใหม่:

./easyrsa init-pki
./easyrsa build-ca

คัดลอกไฟล์. req ไปยังระบบ CA ของคุณจากนั้นนำเข้าและเซ็นชื่อ:

./easyrsa import-req server /tmp/<your_server_name>.req
./easyrsa import-req client /tmp/<some_client_name>.req
./easyrsa sign-req server <your_server_name>
./easyrsa sign-req client <some_client_name>

คัดลอกใบรับรองที่ลงนามใหม่รวมถึงใบรับรอง CA ไปยังตำแหน่งที่เหมาะสมบนเซิร์ฟเวอร์และไคลเอนต์ จากนั้นบนเซิร์ฟเวอร์สร้าง dh params:

 ./easyrsa gen-dh

ขั้นสุดท้ายให้คัดลอกรหัสลูกค้าไปยังเครื่องไคลเอนต์ (หากยังไม่ได้อยู่ที่นั่น) และอัปเดตการกำหนดค่าของคุณด้วยตำแหน่งคีย์และใบรับรองใหม่



คุณสามารถเพิ่มในส่วนที่เกี่ยวข้องของลิงก์ในคำตอบของคุณได้หรือไม่? เราขอให้สิ่งนี้ช่วยฝ่าย OP ดังนั้นพวกเขาจะไม่ต้องค้นหาข้อมูลที่อาจไม่เกี่ยวข้องกับพวกเขา นอกจากนี้ยังเป็นการเก็บรักษาข้อมูลที่เกี่ยวข้องในกรณีที่ไซต์โฮสต์ล่ม สำหรับข้อมูลเพิ่มเติมดูโพสต์เมตานี้
Cfinley

0

ตรวจสอบให้แน่ใจว่าใบรับรองของเซิร์ฟเวอร์ของคุณถูกเซ็นชื่อด้วยการกำหนด nsCertType = เซิร์ฟเวอร์ (นี่เป็นค่าเสื่อมราคาและไม่ใช่ค่าเริ่มต้นหากคุณใช้ easyrsa3) หากไม่ใช่คำสั่งเซิร์ฟเวอร์ 'ns-cert-type' ในการกำหนดค่าไคลเอนต์ของคุณจะทำให้การจับมือ tls ล้มเหลว ใช้ 'เซิร์ฟเวอร์ remote-cert-tls' แทน

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