วิธีการใช้อุโมงค์ TUN / TAP จากผู้ใช้โปรแกรม?


9

ฉันเพิ่งค้นพบการมีอยู่ของส่วนต่อประสาน TUN / TAP ของ Linux และฉันยังคงพยายามที่จะเข้าใจพวกเขา ฉันคิดว่าฉันได้รับแนวคิดพื้นฐาน - อุปกรณ์หลอกถูกสร้างขึ้นซึ่งเลียนแบบอินเทอร์เฟซเครือข่ายและแทนที่จะส่งผ่านข้อมูลไปยังฮาร์ดแวร์จะถูกส่งไปยังโปรแกรม userspace

คุณจะนำโปรแกรมที่ไม่เกี่ยวข้องไปใช้อุโมงค์นี้อย่างไร

ตัวอย่างเช่นก่อนที่อุโมงค์จะถูกสร้างขึ้นระบบของฉันมีเฉพาะ eth0 และ lo เท่านั้นอินเตอร์เฟสอีเธอร์เน็ตปกติ (เชื่อมต่อกับเครือข่ายท้องถิ่นของฉัน) และอินเตอร์เฟสลูปแบ็ค หลังจากโปรแกรมสร้างและกำหนดค่าอุโมงค์ฉันมีอินเตอร์เฟสใหม่ gr0 ซึ่งฉันได้ให้ที่อยู่ IP ที่อยู่ในเครือข่ายท้องถิ่นของฉัน แต่ไม่ได้ใช้งาน (ดังนั้นเราทุกคนอยู่ในเครือข่ายย่อยเดียวกัน) ฉันจะทำให้โปรแกรมที่ไม่เกี่ยวข้องใช้ 'อุโมงค์' นี้ได้อย่างไร ถ้าฉันมีข้อความ Python อย่างง่ายผ่านแอปไคลเอนต์ / เซิร์ฟเวอร์ที่ใช้การเชื่อมต่อ TCP ฉันจะกำหนดค่าให้ใช้ช่องสัญญาณได้อย่างไร

ฉันขอโทษถ้าฉันขาดพื้นฐานบางอย่าง แต่ตามปกติฉันจัดการสับสนในรูปแบบของสิ่งต่าง ๆ อีกครั้งทั้งหมดที่ฉันต้องการคือการมีโปรแกรม TCP อย่างง่ายใช้อุโมงค์นี้

ขอบคุณ!

คำตอบ:


7

มันไม่ใช่ "อุโมงค์" เสมอไป TUN / TAP เป็นเพียงไดรเวอร์ NIC ที่เจาะจง จากมุมมองของสแต็กเครือข่ายพวกเขาทำหน้าที่เป็นอินเทอร์เฟซเครือข่ายอื่น ๆ : พวกเขาสามารถมีที่อยู่ IP สามารถเป็นแบบจุดต่อจุดหรืออินเตอร์เฟซออกอากาศ กฎการจัดเส้นทางยังมีผลบังคับใช้อีกด้วย แต่ทราฟฟิกทั้งหมดที่ถูกเขียนไปยังหนึ่งในอินเทอร์เฟซเครือข่ายนั้นจะไปที่โปรแกรม userspace บางตัวสำหรับการประมวลผลและข้อมูลทั้งหมดที่เขียนโดยโปรแกรม userspace โดยตรงไปยัง/dev/tunXดูเหมือนว่าแพ็กเก็ตขาเข้าสำหรับสแต็กเครือข่าย

ในเซิร์ฟเวอร์การตั้งค่าช่องสัญญาณปกติและไคลเอนต์มีอุปกรณ์ TUN ที่มีที่อยู่ที่กำหนด ตารางเส้นทางที่กำหนดค่าไว้บนทั้งคู่จะนำทราฟฟิกที่ต้องการไปยังอุปกรณ์ TUN นี้ เมื่อแพ็กเก็ตถูกส่งไปยัง tun0 เคอร์เนลจะส่งไปยังโปรแกรม userspace (ไคลเอ็นต์) ที่ส่งแพ็กเก็ตนี้ไปยังโปรแกรมอื่นบนเครื่องระยะไกล (เซิร์ฟเวอร์) ผ่านตัวอย่างเช่นการเชื่อมต่อ TCP บนเครื่องระยะไกลโปรแกรมอื่น (เซิร์ฟเวอร์) รับแพ็กเก็ตจากไคลเอนต์และเขียนลงใน/dev/tunXอุปกรณ์ของตัวเอง"ฉีด" แพ็กเก็ตนั้นลงในสแต็กเครือข่าย และแพ็กเก็ตที่ถูกอุโมงค์จะถูกประมวลผลเหมือนกัน


1
ดังนั้นคำตอบ (สำหรับจุดประสงค์ของฉัน) คือการกำหนดค่าตารางเส้นทางเพื่อรับส่งข้อมูลโดยตรงไปยังอินเทอร์เฟซเหล่านี้ นั่นคือจุดที่ฉันขาดหายไป แต่ตอนนี้ฉันน่าจะสามารถหาทางแก้ไขได้ นอกจากนี้ฉันขอขอบคุณคำอธิบายที่ล้างสิ่งต่างๆออกไป ขอบคุณ!
Mr. Shickadance

2
ฉันใช้ "เส้นทางเพิ่ม <TUN IP ADDR> dev gr0" สิ่งนี้ทำให้ฉันสามารถเปลี่ยนเส้นทางการรับส่งข้อมูลผ่านอินเทอร์เฟซใหม่ ขอบคุณอีกครั้ง!
Mr. Shickadance
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.