ฉันเพิ่งตั้งเซิร์ฟเวอร์ Debian Wheezy กับ OpenVPN เพื่อช่วยเพื่อนในพื้นที่ที่การเซ็นเซอร์อินเทอร์เน็ตเป็นปัญหา (รวมถึงการบล็อกการรับส่งข้อมูล VPN โดยทั่วไป) เพื่อเอาชนะสิ่งนี้ลูกค้าต้องสร้างอุโมงค์ SSH ไปยังเซิร์ฟเวอร์ก่อนจากนั้นเชื่อมต่อกับ VPN ที่อยู่เหนือนั้น
เซิร์ฟเวอร์เปิดพอร์ต SSH 40001 และพอร์ต 40002 สำหรับเซิร์ฟเวอร์ OpenVPN ที่มีโปรโตคอล TCP ดูเหมือนว่าทั้งสองอย่างนี้จะถูกกำหนดค่าอย่างถูกต้องบนเราเตอร์
ฉันให้สคริปท์แก่ลูกค้าของฉันซึ่งจะติดตาม localhost ของพวกเขา: 8080 ถึง myserver: 40001 จากนั้นเชื่อมต่อกับ VPN ไคลเอ็นต์การกำหนดค่า OpenVPN ของพวกเขามีการตั้งค่า 'ระยะไกล' เป็น 'localhost 8080' ดังนั้นการเชื่อมต่อ VPN จะถูกส่งไปยังอุโมงค์ SSH นี้
ปัญหาของฉันคืออุโมงค์นี้ดูเหมือนว่าจะทำงานบางครั้ง (ดูเหมือนจะสุ่มเวลา) แต่มักจะล้มเหลวในการเชื่อมต่อ ฉันเคยเห็นมันทำงานพร้อมกันในคอมพิวเตอร์บางเครื่อง (ของตัวเองส่วนใหญ่) แต่ไม่ใช่คนอื่น ๆ เมื่อล้มเหลวไคลเอนต์จะเชื่อมต่อกับ VPN แต่จะไม่สามารถเข้าถึงอินเทอร์เน็ตและหลังจากนั้นประมาณ 30-40 วินาทีกระบวนการอุโมงค์ SSH ก็จะสิ้นสุดเพียงแค่ (การเปิดอุโมงค์ด้วยตนเองให้ผลเท่านั้น "ข้อผิดพลาดการเขียน: ท่อแตก" เมื่อมันตาย) ฉันไม่พบสิ่งใด ๆ ในบันทึกของเซิร์ฟเวอร์หรือไคลเอนต์เพื่อแนะนำว่าทำไมสิ่งนี้ถึงเกิดขึ้นหรือสิ่งที่กำลังฆ่าอุโมงค์
ฉันรู้ว่ามันไม่ใช่ความผิดของการเชื่อมต่อ VPN เพราะถ้าฉันเปลี่ยน IP ระยะไกลจาก localhost: 8080 เป็นที่อยู่สาธารณะจริงและพอร์ต OpenVPN ของเซิร์ฟเวอร์ของฉันมันจะทำงานได้อย่างถูกต้องสม่ำเสมอ
ความสงสัยของฉันคือกฎ iptables ของฉันนั้นรองรับการเชื่อมต่อขาเข้ากับ VPN โดยตรง แต่การเชื่อมต่อกับ VPN ที่มาจากภายในเซิร์ฟเวอร์ตัวเอง (เนื่องจากอุโมงค์ SSH) ได้รับการปฏิบัติแตกต่างกัน อย่างไรก็ตามหากเป็นกรณีนี้ฉันไม่เห็นว่าทำไมมันจึงใช้ได้เฉพาะบางครั้งเท่านั้น มีอะไรอีกที่ทำให้การเชื่อมต่อเหล่านี้ลดลง ฉันไม่พบสิ่งใดที่เกี่ยวข้องใน /var/log/auth.log, /etc/openvpn/openvpn.log หรือบันทึกลูกค้าใด ๆ
/etc/iptables/rules.v4 ของฉันเป็นดังนี้:
*nat
:PREROUTING ACCEPT [211:13875]
:INPUT ACCEPT [3:371]
:OUTPUT ACCEPT [5:348]
:POSTROUTING ACCEPT [5:348]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [7937:9042429]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [10987:15593548]
:fail2ban-ssh - [0:0]
-A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i tun0 -o eth0 -j ACCEPT
-A INPUT -p tcp -d localhost --destination-port 40001 -j ACCEPT
COMMIT
แก้ไข: ฉันพบสิ่งที่ทำให้เกิดปัญหา แต่ฉันยังไม่ทราบวิธีการแก้ไข เมื่อไคลเอนต์ใช้ VPN การรับส่งข้อมูลทั้งหมดรวมถึงอุโมงค์ SSH นั้นจะถูกส่งไป นี่เป็นวงกลมแน่นอนและอุโมงค์ล่ม ฉันแค่ต้องแยกอุโมงค์ SSH ออกจากการกำหนดเส้นทางของ OpenVPN อย่างใด ...