ใช้ iptables เพื่อส่งต่อ ipv6 ไปยัง ipv4 หรือไม่


16

ขณะนี้ฉันมีการตั้งค่าเนื่องจากการกำหนดค่าที่ใช้เวลานานในการแก้ไขฉันมีเซิร์ฟเวอร์ที่สามารถเข้าถึงได้โดย ipv4 เท่านั้น อย่างไรก็ตามฉันยังมีเซิร์ฟเวอร์ที่สามารถเข้าถึงได้โดย ipv6 ฉันสงสัยว่าฉันสามารถใช้ iptables เพื่อส่งต่อปริมาณข้อมูล ipv6 บนพอร์ตหนึ่งจากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่นโดยใช้ปริมาณข้อมูล ipv4


2
สิ่งที่คุณกำลังมองหาเรียกว่า NAT64 ซึ่งฉันไม่คิดว่า iptables จะทำ (ยัง)
Chris S

คริสพูดถูก - NAT64 RFCs เพิ่งได้รับการเผยแพร่ฉันจะรอสักครู่จนกว่าจะมีอะไรรองรับ ที่กล่าวว่าคุณอาจจะสามารถบรรลุเป้าหมายของคุณในวิธีที่แตกต่างกัน แต่เราไม่มีรายละเอียดเพียงพอที่จะทราบได้อย่างแน่นอน ตัวอย่างเช่นหากเป็นเซิร์ฟเวอร์ HTTP คุณสามารถย้อนกลับการร้องขอระหว่างโปรโตคอลได้
เชนแมดเดน

คำตอบ:


16

IPtables ไม่สามารถทำได้ดังนั้นคุณต้องมีกระบวนการ userspace เพื่อเชื่อมต่อพร็อกซี socatเป็นเครื่องมือที่เหมาะสมสำหรับสิ่งนี้:

socat TCP6-LISTEN:1234,fork TCP4:1.2.3.4:1234

1
ขอบคุณสิ่งนี้มีประโยชน์! ในกรณีที่ทุกคนกำลังมองหาวิธีแก้ปัญหา UDP: socat UDP6-RECVFROM: 64444, ทางแยก UDP4-SENDTO: localhost: 64443 ทำงานให้ฉัน
Alexander

10

ดังที่ระบุไว้ในความคิดเห็นเกี่ยวกับคำถามของคุณ NAT64 นั้นยังห่างไกลจากความพร้อมแม้กระทั่ง 3 ปีต่อมา

อย่างไรก็ตามคุณสามารถลอง6tunnelได้ตามที่แนะนำไว้

โชคดีที่มันมีอยู่ใน Debian และ Ubuntu sudo apt-get install 6tunnelเก็บเพื่อให้คุณสามารถติดตั้งได้อย่างง่ายดายโดยใช้ หากคุณกำลังใช้ระบบอื่นคุณจะต้องสร้างมันขึ้นมาจากแหล่งที่มา

การสร้างจากแหล่งที่มานั้นไม่ใช่เรื่องยากและเป็นเพียงการรันคำสั่งบางอย่าง (ในฐานะรูท):

git clone https://github.com/wojtekka/6tunnel && cd 6tunnel && ./autogen.sh && make && make install

นี่คือไวยากรณ์ของมันง่ายขึ้น:

6tunnel [-4|-6] [-l local-host] original-port destination-host destination-port
  • [-4|-6]เป็นตัวเลือกและช่วยให้คุณระบุว่าคุณจะผูก (ฟัง) บน IPv4 หรือ IPv6 (ตามลำดับ)
  • -lเป็นตัวเลือก ช่วยให้คุณเลือกที่อยู่ (IPv4 หรือ IPv6) ที่คุณต้องการผูก
  • พอร์ตเดิมเป็นพอร์ตที่คุณจะผูก
  • โฮสต์ปลายทางคือที่ที่คุณจะส่งต่อการเข้าชม สามารถอยู่ที่ใดก็ได้: localhost หรือที่อื่นบนเครือข่ายของคุณหรือบนอินเทอร์เน็ต
  • พอร์ตปลายทางเป็นพอร์ตบนโฮสต์ปลายทางซึ่งจะได้รับการจราจรส่งต่อไปของคุณ

ตัวอย่างเช่นถ้าคุณต้องการอนุญาตให้เซิร์ฟเวอร์ IPv4 เท่านั้นฟังพอร์ต 1337 เพื่อเข้าถึงผ่าน IPv6 ให้ใช้:

6tunnel -6 1337 localhost 1337

คำสั่งดังกล่าวจะฟังบนพอร์ต 1337 บน IPv6 และส่งต่อการรับส่งข้อมูลไปยังพอร์ต 1337 บนเครื่องเดียวกันผ่านทาง IPv4 มันจะทำงานในพื้นหลังดังนั้นคุณไม่ต้องกังวลกับมัน

ที่จริงแล้วคุณควรตั้งค่างาน cron เพื่อให้แน่ใจว่ายังคงทำงานอยู่ 6tunnelให้ตัวอย่างเพื่อความสะดวกของคุณ! การรันมันตอนบูทก็ไม่ควรคิดเช่นกัน

สำหรับเอกสารเพิ่มเติมทำงานหรือ6tunnel -hman 6tunnel


การโพสต์เป็นคำตอบใหม่เนื่องจากการแก้ไขคำตอบปัจจุบันด้วยการไขปริศนาจะเปลี่ยนวิธีมากเกินไปและอาจถูกปฏิเสธว่าเป็นการแก้ไขที่แนะนำ!
Léo Lam

5

เวอร์ชันล่าสุดของxinetdสามารถฟังบน IPv6 แล้วส่งต่อการเชื่อมต่อไปยังที่อยู่ IPv4

ตัวอย่างการกำหนดค่าซึ่งรับฟังการเชื่อมต่อ IPv6 ที่พอร์ต 3389 และส่งต่อไปยังพอร์ต 3389 ของที่อยู่ IPv4 ภายใน:

service rdp_port_forward
{
    flags           = IPv6
    disable         = no
    type            = UNLISTED
    socket_type     = stream
    protocol        = tcp
    user            = nobody
    wait            = no
    redirect        = 10.187.20.42 3389
    port            = 3389
}

สิ่งนี้อาจมีประโยชน์ในสภาพแวดล้อมที่ จำกัด มากขึ้นเนื่องจากxinetdมีแนวโน้มที่จะติดตั้งกับระบบฐานของคุณหรือมีอยู่ในที่เก็บข้อมูลของผู้ขายที่ได้รับอนุญาต


3

ฉันต้องการแสดงความคิดเห็นเกี่ยวกับ Leo Lams คำตอบและ upvote แต่ฉันมีชื่อเสียงไม่เพียงพอ ก่อนอื่น: ขอบคุณมาก Leo Lam!

สำหรับใครก็ตามที่เข้ามาในหัวข้อนี้: ISP ของฉันเปลี่ยนการเชื่อมต่อจาก IPv4 เป็น IPv6 ด้วย Dual Stack Lite ซึ่งหมายความว่าฉันไม่มีที่อยู่ IPv4 ของตัวเองอีกต่อไป นี่เป็นปัญหาเนื่องจากฉันต้องการเข้าถึงกล้อง IP ของฉันจากที่ใดก็ตามที่ไม่รองรับ IPv6 เพื่อแก้ไขปัญหานี้ฉันได้ลองทำสิ่งต่อไปนี้:

  1. การเปิดใช้งาน IPv6 Forward สำหรับพอร์ต 99 ในเราเตอร์ของฉันไปยังเครื่อง Ubuntu ของฉัน
  2. เครื่อง Ubuntu (เครือข่ายในบ้าน): sudo 6tunnel -6 99 192.168.178.35 80
  3. vServer Debian พร้อมที่อยู่ IPv4 และ IPv6 แบบคงที่: sudo 6tunnel -4 99 IPV6PREFIXROUTER:IPV6INTERFACEIDUUBUNTUMACHINE 99
  4. vServer Debian: อนุญาตการเชื่อมต่อ tcp ขาเข้าบนพอร์ต 99 ใน iptables

คำนำหน้า ipv6 ถูกแสดงในเราเตอร์ของฉันและรหัสอินเทอร์เฟซถูกแมปในกระบวนการส่งต่อ IPv6

ตอนนี้ฉันสามารถเข้าถึงกล้องได้จากทุกที่โดยใช้โดเมน vServer example.com:99 .. สมบูรณ์แบบ! ฉันวางแผนว่าจะรับราสเบอร์รี่ซึ่งจะทำให้งานนี้สำเร็จหรือ Banana pi m3 สำหรับงานอื่น ๆ ด้วย


1
ตอนนี้คุณรู้ว่าต้องทำอย่างไรเมื่อคุณต้องการกล้อง IP ตัวอื่น ปี 2558 การซื้อเครื่องที่ไม่รองรับ IPv6 เป็นการเสียเงินอย่างสมบูรณ์
Michael Hampton

มันไม่เหมือนกล้องที่มีอายุเพียงไม่กี่ปี: p
Crumar

2

เพิ่มเติมเพื่อประโยชน์ของผู้ที่พบหน้านี้มากกว่า OP จำเป็น (ฉันมาที่นี่กำลังมองหาวิธีแก้ปัญหาการเชื่อมต่อ IPv6 สำหรับแอปพลิเคชั่น IPv4 (Twisted)) ความเป็นไปได้อย่างหนึ่งคือแอพพลิเคชั่น 6tunnel ท่าเรือ.

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