การส่งต่อพอร์ตจากโฮสต์ไปยังผู้เยี่ยมชมด้วย libvirt 0.8.3 การใช้ KVM บน Ubuntu


14

โฮสต์มี IP ภายนอกเดียวที่ใช้ได้ดังนั้นฉันจึงตั้งค่าผู้เยี่ยมชม KVM ของฉันด้วย NAT

ฉันจะตั้งค่าการส่งต่อพอร์ตเพื่อส่งต่อคำขอบางส่วนจากภายนอกไปยังแขกได้อย่างไร

ฉันไม่พบเอกสารใด ๆ เกี่ยวกับเรื่องนี้ คำตอบที่ใกล้เคียงที่สุดน่าจะเป็นคำตอบนี้แต่ก็มีการพูดถึงวิธีการที่ง่ายกว่าใน libvirt 0.8.3 ไม่มีใครรู้วิธีที่เป็นปัจจุบันมากขึ้นในการทำเช่นนี้?


ภายนอก - คุณหมายถึงอินเทอร์เน็ตไอพี หรือแค่ LAN ของคุณ (ภายนอกถึง VM) คุณสามารถจัดสรรที่อยู่ภายนอกเหล่านั้นให้กับ VMs ของคุณเพื่อตั้งค่าเครือข่ายบริดจ์
Art Shayderov

ฉันสามารถรับที่อยู่อินเทอร์เน็ต IP ได้เพียงที่เดียวนั่นคือสาเหตุที่ฉันไม่ได้ใช้โหมดเครือข่ายบริดจ์
wei

คำตอบ:


12

นี่เป็นวิธีที่ดีกว่าในการตั้งค่าการส่งต่อพอร์ตโดยใช้ hook script ( แหล่งที่มา )

ใน/etc/libvirt/hooks/qemu:

#!/bin/sh

GUEST_NAME=
HOST_PORT=
GUEST_IPADDR=
GUEST_PORT=

if [ "$1" = "$GUEST_NAME" ]; then
  if [ "$2" = start ]; then
    iptables -t nat -A PREROUTING -p tcp --dport "$HOST_PORT" \
         -j DNAT --to "$GUEST_IPADDR:$GUEST_PORT"
    iptables -I FORWARD -d "$GUEST_IPADDR/32" -p tcp -m state \
         --state NEW -m tcp --dport "$GUEST_PORT" -j ACCEPT
  elif [ "$2" = stopped ]; then
    iptables -t nat -D PREROUTING -p tcp --dport "$HOST_PORT" \
         -j DNAT --to "$GUEST_IPADDR:$GUEST_PORT"
    iptables -D FORWARD -d "$GUEST_IPADDR/32" -p tcp -m state \
         --state NEW -m tcp --dport "$GUEST_PORT" -j ACCEPT
  fi
fi

คุณควรตั้งค่าตัวแปรทั้งสี่ที่ด้านบนให้พอดีกับการตั้งค่า libvirt ของคุณ

คุณจะต้องรีสตาร์ท libvirt-bin ซึ่งทำบน Ubuntu เสร็จแล้วด้วย:

sudo sh -c 'service libvirt-bin stop; service libvirt-bin start'

จากนั้นคุณจะต้องรีสตาร์ทแขก ใน Ubuntu คุณจะต้องปรับเปลี่ยน/etc/apparmor.d/usr.sbin.libvirtdเพื่อให้ hook script สามารถทำงานได้:

ถัดไปเพื่อ

/usr/sbin/* PUx,

ผนวก

/etc/libvirt/hooks/* PUx,

จากนั้นโหลด apparmor ใหม่:

sudo service apparmor reload

อาจเป็นวิธีการกำหนดค่าอัตโนมัติ$GUEST_IPADDRโดยใช้ virsh / dumpxml / iface-dumpxml แต่ฉันไม่พบมัน อีกวิธีหนึ่งคือ IP ที่สามารถตั้งค่าแบบคงที่ในรูปแบบ XML เครือข่าย: เอกสาร

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


1
Trusty มีบรรทัด/etc/libvirt/hooks/** rmix,ในไฟล์ config apparmor ตามค่าเริ่มต้นและดูเหมือนว่าจะมีผลเหมือนกัน ฉันสามารถเรียกใช้สคริปต์โดยไม่ต้องแก้ไขการกำหนดค่า apparmor
Amir Ali Akbari

2

ฉันอยู่ในสถานการณ์ที่คล้ายคลึงกัน ฉันมี Windows Server ที่ทำงานใน KVM ในเครือข่าย NATed ส่วนตัวซึ่งเชื่อมต่อกับโฮสต์ผ่านอินเตอร์เฟส virbr0 ฉันต้องการเข้าถึง VM ผ่านเดสก์ท็อประยะไกล ดังนั้นฉันต้องส่งต่อทราฟฟิกไปที่พอร์ต 3389 (RDP) ไปยังพอร์ต VM 3389 ฉันทำได้โดยใช้กฎ iptable

/ sbin / iptables -t nat -A การเตรียมความพร้อม -p tcp -d HOST-IP - พอร์ต 3389 -j DNAT - ไปยังปลายทาง VM-IP: 3389

/ sbin / iptables - ฉันไปข้างหน้า - รัฐ -d VM-NET / 24 - รัฐใหม่, ที่เกี่ยวข้อง, ESTABLISHED -j ได้รับการยอมรับ

แน่นอนว่าต้องใช้ HOST-IP, VM-IP และ VM-NET อย่างไรก็ตาม messing กับ iptables และ libvirt นั้นยุ่งยาก ตอนนี้ฉันกำลังค้นหาวิธีการเข้าถึงอินเทอร์เน็ตบน VM ของฉันซึ่งฉันได้หายไปเนื่องจาก messing กับกฎ iptable :-(


ฉันรู้ว่ามันมีอายุไม่กี่ปี แต่คำตอบนี้ใช้ได้สำหรับฉัน ขอบคุณ!
mttdbrd

1

ฉันเชื่อว่าคำตอบที่คุณอ้างอิงยังคงแสดงกฎ iptables ที่เหมาะสม อย่างไรก็ตามตอนนี้คุณสามารถใช้เบ็ดของสคริปต์เพื่อสร้างและทำลายกฎเมื่อเครื่องเสมือนเริ่มและหยุดทำงาน เช่นเดียวกับ Isaac ที่กล่าวไว้ในคำตอบก่อนหน้านี้ยังมีตัวกรองเครือข่ายใน libvirt ปัจจุบัน แต่ฉันไม่แน่ใจว่าจะสามารถใช้เพื่อเปิดพอร์ตสำหรับแขก NATed ได้หรือไม่


0

ระบบเครือข่ายของแขกตั้งค่าอย่างไร หากเชื่อมต่อแล้วสิ่งที่คุณต้องทำคือส่งต่อพอร์ตไปยัง IP ของแขก หากแขกของคุณอยู่ข้างหลัง NAT อีกคนหนึ่ง libvirt ตั้งขึ้นแล้วมันจะซับซ้อน

แต่ในกรณีใด ๆ ที่นี่คุณเพียงแค่ปฏิบัติกับ VMs เช่นเดียวกับที่คุณมีเครื่องทางกายภาพ


ฉันเดาว่าฉันไม่ได้พูดอย่างชัดเจน โฮสต์ไม่ได้อยู่ใน NAT แต่ก็มีที่อยู่ IP ภายนอก น่าเสียดายที่ระบบเครือข่ายของแขกอยู่ด้านหลัง NAT ที่ตั้งค่าโดย libvirt
wei

อาแล้วมันเป็นเรื่องอื่น โดยทั่วไป libvirt จัดการโซลูชัน NAT ของตัวเองซึ่งสามารถแก้ไขได้
dyasny

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

หากคุณเชื่อมต่อเครือข่ายคุณสามารถละทิ้ง libvirt NAT เริ่มต้นและตั้งค่าสิ่งที่คุณต้องการ ดังที่ dyasny กล่าวไว้ให้ปฏิบัติกับ VM เหมือนกับที่คุณใช้กับเครื่องทางกายภาพ ฉันมีโฮสต์และอินเตอร์เฟส KVM พร้อม IP ภายนอกที่กำหนดให้กับ VM ซึ่งกำหนดค่าเป็นเกตเวย์ ถ้าเหมาะสมกับที่คุณต้องการฉันสามารถโพสต์การกำหนดค่า (อูบุนตูสไตล์)
Art Shayderov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.