Score:-1

บรรทัดคำสั่ง KVM nat

ธง wf
t09

วิธีที่ถูกต้องในการตั้งค่าเครือข่าย NAT ระหว่าง KVM vm และโฮสต์คืออะไร

KVM vm:

ไม่มีการติดตั้งไฟร์วอลล์

$ sudo arp-scan -r 5 -t 1,000 --interface=eth0 --localnet

10.0.2.2 52:55:0a:00:02:02 บริหารเฉพาะที่
10.0.2.3 52:55:0a:00:02:03 บริหารเฉพาะที่

$ ไอพีอาร์

ค่าเริ่มต้นผ่าน 10.0.2.2 dev eth0 proto dhcp metric 100
10.0.2.0/24 dev eth0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.0.2.15 เมตริก 100

ifconfig

eth0: inet 10.0.2.15 netmask 255.255.255.0 ออกอากาศ 10.0.2.255
      อีเธอร์ 52:54:00:12:34:56
แท้จริง: inet 127.0.0.1 netmask 255.0.0.0
      inet6 ::1

เจ้าภาพ:

:~$ ไอพีอาร์

0.0.0.0/1 ผ่าน 10.211.1.10 dev tun0 
ค่าเริ่มต้นผ่าน 192.168.1.1 dev wlan0 proto dhcp metric 600 
10.21xxxxxxxx dev tun0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.21xxxxx 
xxxxxxxxxxxx ผู้พัฒนา wlan0 
128.0.0.0/1 ผ่าน 10.211.1.10 dev tun0 
192.168.1.0/24 dev wlan0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.1.172 เมตริก 600 
192.168.4.0/22 ​​dev eth0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 192.168.4.8 เมตริก 100 

:~$ ifconfig

 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 10.0.2.3 netmask 255.0.0.0 ออกอากาศ 10.255.255.255
    inet6 fe80::76c8:79b4:88d4:7f5c คำนำหน้า 64 scopeid 0x20<link>
    อีเธอร์ ec:8e:b5:71:33:6e txqueuelen 1000 (อีเธอร์เน็ต)
    แพ็คเก็ต RX 1700 ไบต์ 194730 (190.1 KiB)
    ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
    แพ็กเก็ต TX 2862 ไบต์ 246108 (240.3 KiB)
    ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0
    อุปกรณ์ขัดจังหวะ 16 หน่วยความจำ 0xe1000000-e1020000  

 แท้จริง: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
    inet 127.0.0.1 เน็ตมาสก์ 255.0.0.0
    inet6 ::1 คำนำหน้าlen 128 scopeid 0x10<host>
    วนซ้ำ txqueuelen 1,000 (วนกลับในเครื่อง)
    แพ็คเก็ต RX 13251 ไบต์ 7933624 (7.5 MiB)
    ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
    แพ็กเก็ต TX 13251 ไบต์ 7933624 (7.5 MiB)
    ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
    inet 10.211.1.69 netmask 255.255.255.255 ปลายทาง 10.211.1.70
    inet6 fe80::a920:941c:ffa8:5579 คำนำหน้า 64 scopeid 0x20<link>
    ไม่ระบุ 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
    แพ็คเก็ต RX 4348 ไบต์ 2242726 (2.1 MiB)
    ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
    แพ็กเก็ต TX 3823 ไบต์ 404190 (394.7 KiB)
    ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 192.168.1.172 netmask 255.255.255.0 ออกอากาศ 192.168.1.255
    inet6 fe80::651b:5014:7929:9ba3 คำนำหน้า 64 scopeid 0x20<link>
    อีเธอร์ d8:55:a3:d5:d1:30 txqueuelen 1,000 (อีเธอร์เน็ต)
    แพ็คเก็ต RX 114455 ไบต์ 117950099 (112.4 MiB)
    ข้อผิดพลาด RX 0 หลุด 0 โอเวอร์รัน 0 เฟรม 0
    แพ็กเก็ต TX 67169 ไบต์ 14855011 (14.1 MiB)
    ข้อผิดพลาด TX 0 หลุด 0 โอเวอร์รัน 0 พาหะ 0 ชนกัน 0 

~$ sudo arp-scan -r 5 -t 1,000 --localnet

แค่แฮงค์......

โฮสต์ไม่สามารถ ping 10.0.2.2

ไม่มีการเปิดใช้งานไฟร์วอลล์

พยายาม

เส้นทาง $ sudo ip เพิ่มค่าเริ่มต้นผ่าน 10.0.2.0
เส้นทาง $ sudo ip เพิ่มค่าเริ่มต้นผ่าน 10.0.2.2
เส้นทาง $ sudo ip เพิ่มค่าเริ่มต้นผ่าน 10.0.2.0/24

NAT จะทำงานโดยไม่มี virsh ได้หรือไม่ ?

NAT สามารถแก้ไขได้จาก command line เท่านั้น ?

อัปเดต:

$ sudo ip link เพิ่มสะพานประเภท natbr0
$ sudo ip link ตั้งค่า dev natbr0 ขึ้น
$ sudo ip link ตั้งค่า dev eth0 ขึ้น
$ sudo ip link set dev eth0 master natbr0

ที่ทำงานเพื่อเชื่อมโยง eth0 ทาสกับ kvm - vm สามารถ ping คอมพิวเตอร์เครื่องอื่นบนเครือข่ายได้ แต่ไม่ใช่เจ้าภาพ @ทมยันตี ตอบรวมกับ archlinux-Network_bridge สร้างคำสั่งด้านบนที่สามารถ ping ip ของเครือข่ายอื่นได้

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

เป้าหมาย: host$ ping kvm

$ sudo ip link เพิ่มสะพานประเภท natbr0
$ sudo ip link ตั้งค่า dev natbr0 ขึ้น
$ sudo ip เพิ่ม 10.0.2.1/24 dev natbr0
$ sudo kvm -m 3G -hdb /dev/sde -nic สะพาน br=natbr0
ลิงก์ kvm$ sudo ip เพิ่มสะพานประเภท natbr0
kvm$ sudo ip เพิ่ม 10.0.2.2
ลิงก์ kvm$ sudo ip ตั้งค่า dev natbr0 ขึ้น
kvm สามารถ ping ได้ด้วยตัวเอง 

$ ปิง 10.0.2.2

PING 10.0.2.2 (10.0.2.2) 56(84) ไบต์ของข้อมูล
64 ไบต์จาก 10.0.2.2: icmp_seq=1 ttl=64 เวลา=0.027 ms

แต่ kvm$ping 10.0.2.1

ไม่สามารถเข้าถึงโฮสต์ปลายทางได้

โฮสต์ $ ping 10.0.2.2

(แค่แฮงค์)

เลือกใช้บรรทัดคำสั่งเพื่อทดสอบความยืดหยุ่นของกระบวนการ/ระบบแบบเปล่าๆ เทียบกับสคริปต์จำนวนมากที่อาจก่อให้เกิดความเสี่ยงต่อความล้มเหลวได้มากกว่า - บรรทัดคำสั่งทำงานได้หรือไม่ และข้อผิดพลาดจะถูกติดตาม แยก และทำซ้ำได้ง่ายกว่า ขึ้นอยู่กับรสชาติของลินุกซ์ สคริปต์/บางส่วนของสคริปต์ (เช่น ที่รวมอยู่ในโซลูชันทางเลือก xml ที่มีให้) อาจทำงานหรือไม่ทำงาน หากการเชื่อมต่อกับ kvm สามารถทำซ้ำได้บน linux รสชาติใดก็ได้โดยทำตามคำสั่งด้านบน .... จากนั้นดูเหมือนว่าเป็นไปได้ที่ kvm NAT สามารถทำได้โดยใช้คำสั่ง cli - เพียงเพื่อชี้แจงประเด็นของโพสต์นี้ cli ขั้นตอนสู่ NAT kvm จะเป็น ได้มาตรฐานกว่าจึงเป็นที่นิยม

โดยทั่วไปคำตอบของ @NikitaKipriyanov คือถนนที่ถูกต้อง นี่คือคำตอบ แต่ต้องปรับแต่งเพื่อสั่งการ

$ sudo kvm -m 3G -hdb /dev/sde -net nic -net user,hostfwd=tcp::1810-:22

การใช้คำสั่ง tweak vm สามารถสื่อสารกับอินเทอร์เน็ตได้เหมือนค่าเริ่มต้น และยังสื่อสารกับโฮสต์ผ่าน ssh ให้เครดิต @NikitaKipriyanov และ @cnst สำหรับการปรับแต่ง https://stackoverflow.com/a/54120040

ผู้ใช้จะต้อง ssh โดยใช้พอร์ต 1810 โดยใช้ที่อยู่ localhost

$ ssh p@localhost -p 1810

in flag
ข้อมูลจาก `ip r` และ `ip a` พร้อมข้อมูลว่า nic ใดมาจาก KVM ของคุณ และบางทีบรรทัดคำสั่งของเครื่อง kvm ของคุณน่าจะช่วยแก้ปัญหาของคุณได้ ` -nic user,model=virtio` ให้ NAT โหมดผู้ใช้แก่คุณ หากสิ่งที่คุณต้องการคือ nat จากโฮสต์ไปยังเครือข่ายของคุณจริง ๆ แล้ว: `iptables -t nat -A POSTROUTING -s $vmnet -j MASQUERADE` จะให้ NAT แก่คุณ
Nikita Kipriyanov avatar
za flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [การส่งต่อพอร์ตโฮสต์ด้วย qemu ผ่าน libvirt ในโหมดเครือข่ายผู้ใช้](https://serverfault.com/questions/890520/host-port-forward-with-qemu-through-libvirt-in-user-mode-networking)
t09 avatar
wf flag
t09
@NiKiZe : _iptables -t .... MASQUERADE_ ให้ผลลัพธ์: อาร์กิวเมนต์ `MASQUERADE' ไม่ถูกต้อง และ _iptables -t nat -A POSTROUTING -o Brii -j MASQUERADE_ ได้รับการยอมรับจากโฮสต์ แต่ kvm ยังไม่สามารถ ping โฮสต์หรืออินเทอร์เน็ตได้
Nikita Kipriyanov avatar
za flag
โปรดทราบว่าการบริดจ์ไม่เกี่ยวข้องกับ NAT และการกำหนดเส้นทาง อย่าผสมพวกเขาขึ้น หากคุณต้องการบริดจ์ ให้ลบ "NAT" และ "ip route" และเพื่อนทุกที่ คุณจะไม่ใช้สิ่งนั้น VM ของคุณจะปรากฏพร้อมกับโฮสต์ของคุณในบางเครือข่าย (ซึ่งอาจเป็นเครือข่ายส่วนตัวสำหรับโฮสต์และ VM แต่นั่นก็เป็นอีกเรื่องหนึ่ง) ในทางกลับกัน หากคุณกำลังจะใช้โหมดผู้ใช้ NAT คุณไม่จำเป็นต้องใช้บริดจ์เลย (เนื่องจากได้รับการพัฒนาเพื่อลดความจำเป็นทั้งหมดในการใช้บริดจ์ในตอนแรก)
Nikita Kipriyanov avatar
za flag
คำตอบอื่น (โดย @TomYan) คือ *อีกเรื่อง* ที่ฉันพูดถึง เขาแนะนำให้คุณไปแนวทางนั้น อี จากการใช้โหมดผู้ใช้ NAT คุณใช้ NAT ในระบบปฏิบัติการโฮสต์ นั่นเป็นวิธีที่ใช้การได้ แต่แน่นอนว่า *ยาก* และ *ยุ่งยากกว่า* มากกว่าการสะกดตัวเลือกบรรทัดคำสั่งอย่างถูกต้อง
t09 avatar
wf flag
t09
@Nikita Kipriyanov - ฉันกำลังทำการทดสอบบน kvm เพื่อดูว่ามันสามารถ NAT เช่น Virt-Manager ได้หรือไม่โดยไม่ต้องขยายและโหลดหนักอย่างหนัก virt-manager ต้องการทรัพยากร ฉันจะวิจัยแอปพลิเคชัน cli ของ libvirt กับปัญหานี้และโพสต์ผลลัพธ์หากสำเร็จ
Score:1
ธง za

แนวคิดทั่วไปของ NAT ก็คือคุณ ไม่เห็น ที่อยู่ที่แปลแล้ว คุณไม่มีเส้นทางไปยังพวกเขา พวกเขาไม่มีอยู่จริงสำหรับคุณ คุณจะเห็นเฉพาะที่อยู่ที่แปลเท่านั้น

กรณีของ QEMU ไม่มีอะไรแตกต่างในกรณีนี้ โฮสต์ของคุณอยู่ "ภายนอก" VM ของคุณคือ "ภายใน" ดังนั้นจึงไม่สามารถเข้าถึง VM ได้จากที่อยู่ที่ได้รับการกำหนดให้ คุณมีที่อยู่ 10.0.2.2/24 ของ VM แต่เมื่อไปถึงอินเทอร์เน็ต แพ็คเก็ตของมันจะถูกแปลเป็น 192.168.1.172 โดยกระบวนการ QEMUดังนั้นโฮสต์จึงพิจารณาแพ็กเก็ตเหล่านั้นว่าสร้างขึ้นโดยกระบวนการ QEMU และปฏิบัติต่อแพ็กเก็ตเหล่านี้เหมือนกับแพ็กเก็ตอื่นๆ เช่น จากเว็บเบราว์เซอร์ที่ทำงานในเครื่องหรืออะไรทำนองนั้น

จะเข้าถึง VM จากโฮสต์ได้อย่างไร เมื่อเรามี NAT เพื่อเข้าถึงโฮสต์ที่ซ่อนอยู่ด้านหลัง เราจะทำการติดตั้ง ดีเอ็นเอท กฎ. และอีกครั้ง กรณีของ QEMU ก็ไม่ต่างกัน คุณต้องตั้งค่ากฎบางอย่างในนั้น จากนั้นคุณสามารถสื่อสารกับ VM จากโฮสต์ (จากโฮสต์อื่น ถ้าคุณต้องการ) โดยส่งแพ็กเก็ตไปยังพอร์ตที่เลือกของ เจ้าภาพ ที่อยู่.

ให้เป็นไปตาม เอกสาร QEMUในการตั้งค่ากฎ DNAT ในโหมดผู้ใช้ NAT ให้ใช้ โฮสต์fwd ข้อ ขอแนะนำสิ่งต่อไปนี้ในบรรทัดคำสั่ง:

    -ผู้ใช้ netdev,id=usernet0,hostfwd=tcp::11111-:22 \
    -อุปกรณ์ virtio-net-pci,netdev=usernet0,mac=08:00:27:92:B0:51

จากนั้น tcp port 11111 จะถูกครอบครองโดย qemu-ระบบ-x86_64 ประมวลผลบนเครื่องของฉันและหากคุณเชื่อมต่อกับ โลคัลโฮสต์ พอร์ต 11111 การเชื่อมต่อกับพอร์ต 22 ของ VM

รูปแบบทั่วไปคือ hostfwd=hostip:hostport-guestip:guestportแต่ถ้าคุณละเว้น โฮสต์มันจะเป็น localhost และถ้าคุณละเว้น แขกจะเป็นที่อยู่ "ไม่ใช่เกตเวย์" แรกภายในเครือข่ายแขก

ฉันสังเกตเห็นว่าคุณถูกกล่าวถึง เวอร์ช. คุณกำลังวิ่ง libvirt? จากนั้นคำถามจะซ้ำกัน ดูความคิดเห็น

t09 avatar
wf flag
t09
ขอบคุณ คำตอบมีเหตุผล - ฉันยังทำอะไรผิดอยู่ `$ sudo kvm -m 3G -hdb /dev/sde netdev user,id=usernet0,hostfwd=tcp::11111-:22` เอาต์พุต: `qemu-system-x86_64: netdev: ไม่สามารถเปิด 'netdev': ไม่เช่นนั้น ไฟล์หรือไดเร็กทอรี 'ฉันอ่านลิงก์เอกสาร QEMU - บทช่วยสอนใด ๆ ที่อธิบายทีละขั้นตอนที่ฉันสามารถติดตามได้ ?
t09 avatar
wf flag
t09
`$ sudo kvm -m 3G -hdb /dev/sde ผู้ใช้ netdev,id=usernet0,hostfwd=tcp::11111-:22 อุปกรณ์ virtio-net-pci,netdev=usernet0,mac=08:00:27:92: B0:51` ผลลัพธ์เดียวกัน: `qemu-system-x86_64: netdev: ไม่สามารถเปิด 'netdev': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
Michael Hampton avatar
cz flag
@ t09 เพียงแค่แก้ไขการพิมพ์ผิด; คุณลืม `-` ใน `-netdev user,...`
Tom Yan avatar
in flag
จริงๆ แล้ว `(S)NAT` (ในความหมายที่ไม่ใช่ qemu) ไม่ได้ป้องกัน VM ไม่ให้สามารถเข้าถึงโฮสต์ได้ แต่จะเป็นการ "ปลอมแปลง" ทราฟฟิกจาก VM ในลักษณะที่ดูเหมือนว่ามาจากโฮสต์ VM ไปยังโฮสต์เครือข่ายใน LAN เดียวกันกับเครือข่ายนั้น (เช่น เกตเวย์เริ่มต้น) ในทางเทคนิคแล้ว มันไม่ได้ป้องกันการรับส่งข้อมูลจากโฮสต์เหล่านั้นเพื่อเข้าถึง VM (แต่เพียงว่าการรับส่งข้อมูลตอบกลับจาก VM จะไม่ปรากฏว่าเป็นการตอบกลับ)
Tom Yan avatar
in flag
สิ่งที่ "แยก" VM ได้จริงคือ AFAIK ความจริงที่ว่า `-netdev user` เป็นสแต็กเครือข่าย userspace ภายใน qemu เอง: https://wiki.qemu.org/Documentation/Networking#User_Networking_.28SLIRP.29 ซึ่งก็คือ ทำไมคุณไม่เห็นมีอะไรใหม่ใน `ip l` บนโฮสต์ เป็นเพียงว่าผู้ใช้จำนวนมากจะใช้สิ่งนั้นสำหรับการตั้งค่า "วิธี NAT" (เนื่องจากเป็นค่าเริ่มต้น) ดังนั้นมันจึงกลายเป็นเหมือนคำพ้องความหมายกับ NAT ในบริบท qemu ความจริงก็คือคุณสามารถใช้บริดจ์โดยไม่ต้องมีทาสจริงและอาศัยการส่งต่อ IP สำหรับการเชื่อมต่ออินเทอร์เน็ตใน VM
Nikita Kipriyanov avatar
za flag
@t09 `-netdev` ต้องมีเส้นประจริงๆ นั่นคือตัวเลือกบรรทัดคำสั่ง QEMU
t09 avatar
wf flag
t09
โดยทั่วไปนี่คือคำตอบ แต่ต้องมีการปรับแต่งเพื่อสั่งการ $ sudo kvm -m 3G -hdb /dev/sde -net nic -net user,hostfwd=tcp::1810-:22
Score:0
ธง in

คุณสามารถใช้บริดจ์โดยไม่ต้องบังคับอินเทอร์เฟซอีเทอร์เน็ตทางกายภาพใดๆ ของคุณบนโฮสต์ VM

สมมติว่าเรายึดติดกับเครือข่ายย่อย 10.0.2.0/24 (ซึ่งไม่จำเป็น):

# ip l เพิ่มสะพานประเภท natbr0
# ip เพิ่ม 10.0.2.1/24 dev natbr0

จากนั้นสร้างไฟล์ต่อไปนี้:

$ echo 'อนุญาต natbr0' | sudo tee /etc/qemu/bridge.conf 
อนุญาต natbr0

จากนั้นเริ่ม qemu ด้วยเช่น -สะพานนิค br=natbr0 หรือ สะพาน -netdev,br=natbr0,id=nb0 -อุปกรณ์ virtio-net,netdev=nb0, ซึ่งจะ แตะ VM ของคุณไปยังสะพานในลักษณะไดนามิก (เช่น แตะ อินเทอร์เฟซจะถูกลบออกเมื่อปิด VM)

คุณจะต้องกำหนดค่า IP แบบคงที่บน VM ด้วย:

# ip เพิ่ม 10.0.2.2/24 dev ens3
# ip r เพิ่มค่าเริ่มต้นผ่าน 10.0.2.1

เว้นแต่คุณจะตั้งค่าเซิร์ฟเวอร์ DHCP (เช่น dnsmasq) บนโฮสต์ด้วย อย่าลืมกำหนดค่าเซิร์ฟเวอร์ DNS เพื่อใช้ภายใน VM ด้วย

โปรดทราบว่า VM ที่ใช้บริดจ์เดียวกันสามารถสื่อสารกันได้ เว้นแต่คุณจะปิดกั้นการสื่อสารดังกล่าวด้วยวิธีบางอย่าง (เช่น ebtables)

เดอะ ค่าเริ่มต้น เส้นทาง (และเซิร์ฟเวอร์ DNS ที่จะใช้) จำเป็นเฉพาะในกรณีที่คุณต้องการให้ VM สามารถเข้าถึง "ภายนอก" ได้ หากคุณต้องการให้สามารถสื่อสารกับโฮสต์ VM ได้ คุณควรข้ามคำสั่งที่สองและหยุดอ่านได้ (อ่านดีๆ. ป.ล.)


จะเป็นการดีที่สุดที่จะกำหนดค่าเช่น dnsmasq บนโฮสต์เพื่อเป็นตัวส่งต่อ DNS หากคุณไม่ต้องการใช้เซิร์ฟเวอร์ DNS "สาธารณะ" เฉพาะใน VM แม้ว่าจะใช้ DNAT เพื่อส่งต่อคำขอ DNS ไปยังเช่น 192.168.1.1 ควรใช้ได้กับคนพื้นฐาน

จากนั้นคุณจะต้องเปิดใช้งานการส่งต่อ IP:

# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

หากคุณต้องการหลีกเลี่ยงการส่งต่อ IP จาก/ไปยังอินเทอร์เฟซเครือข่ายบางอย่าง (เช่น. จูน0) เพื่อความปลอดภัย คุณจะต้องตั้งค่าไฟร์วอลล์ ตัวอย่างเช่น:

# iptables -A ไปข้างหน้า -i tun0 -j DROP
# iptables -A ไปข้างหน้า -o tun0 -j DROP

เนื่องจากคุณมีเส้นทางอุโมงค์ (VPN) ที่แทนที่เส้นทางจริง ค่าเริ่มต้น เส้นทางการรับส่งข้อมูลจาก VM ไปยังอินเทอร์เน็ตจะเข้าสู่อุโมงค์ด้วยเช่นกัน (เว้นแต่คุณจะเพิ่มกฎตัวอย่างด้านบน) หากคุณต้องการให้ทราฟฟิกดำเนินไปเช่น ผ่านเราเตอร์ของคุณ คุณจะต้องกำหนดเส้นทางตามนโยบาย ตัวอย่างเช่น:

# ip ru เพิ่มตารางการค้นหา iif natbr0 123
# ip r เพิ่ม 192.168.1.1 dev wlan0 ตาราง 123 # อาจเป็นทางเลือก
# ip r เพิ่มค่าเริ่มต้นผ่าน 192.168.1.1 ตาราง 123

คุณยังสามารถป้องกันไม่ให้ VM ของคุณเข้าถึงโฮสต์ LAN ของคุณได้:

# iptables -A ส่งต่อ -i natbr0 -d 192.168.1.0/24 -j DROP

ทำข้อยกเว้น (หมายเหตุ -ฉัน) หากคุณกำลังจะเปลี่ยนเส้นทางคำขอ DNS ไปยังเราเตอร์ของคุณ:

# iptables -I FORWARD -i natbr0 -d 192.168.1.1 -p tcp --dport 53 -j ยอมรับ
# iptables -I FORWARD -i natbr0 -d 192.168.1.1 -p udp --dport 53 -j ยอมรับ

สุดท้าย กำหนดค่า iptables เพื่อดำเนินการ SNAT แบบไดนามิก (ตามอินเทอร์เฟซขาออก) สำหรับซับเน็ต VM ของคุณ:

# iptables -t nat -A โพสต์ -s 10.0.2.0/24 -j MASQUERADE

โปรดทราบว่าสิ่งนี้ไม่ได้มีไว้เพื่อและจะไม่ป้องกันการรับส่งข้อมูลบางอย่างจาก "ภายนอก" (โฮสต์ LAN จริงหรืออินเทอร์เน็ตของคุณ ไม่นับโฮสต์ VM) เพื่อให้สามารถเข้าถึง VM ของคุณได้ เป็นเพียงการหยุดการสื่อสารเป็นผลข้างเคียงเมื่อที่อยู่ต้นทางของการตอบกลับทราฟฟิกจาก VM มีการเปลี่ยนแปลงก่อนที่จะส่งต่อออกไปสำหรับการแยกตัวที่เหมาะสม คุณจะต้องมีกฎที่เหมาะสม (เพิ่มเติม) ใน ซึ่งไปข้างหน้า โซ่. พิจารณาการตั้งค่า "stateful" ที่นั่นหากคุณต้องการ

นอกจากนี้ คุณสามารถเปลี่ยนเส้นทางคำขอ DNS ไปยังโฮสต์จาก VM ไปยังเราเตอร์ของคุณ:

iptables -t nat -A PREROUTING -d 10.0.2.1 -p udp --dport 53 -j DNAT --to-destination 192.168.1.1
iptables -t nat -A PREROUTING -d 10.0.2.1 -p tcp --dport 53 -j DNAT --to-destination 192.168.1.1

ซึ่งจะมากหรือน้อยให้คุณใช้ 10.0.2.1 เป็นเซิร์ฟเวอร์ DNS ใน VM


ป.ล. การจัดการทั้งหมดข้างต้น (ยกเว้นการสร้าง / เขียนถึง /etc/qemu/bridge.conf) มีความผันผวน เช่น จะหายไปเมื่อคุณรีบูต (เว้นแต่ distro ของคุณจะทำอะไรโง่ๆ) ฉันจะไม่ลงลึกถึงวิธีที่คุณจะทำให้สิ่งเหล่านี้คงอยู่ได้ เนื่องจากมีวิธี/แนวทางที่แตกต่างกันและอาจเป็นแบบเฉพาะเจาะจง

t09 avatar
wf flag
t09
ต้องสร้าง /etc/qemu/ dir....ไม่แน่ใจว่าฉันกำลังหมุน vm อย่างถูกต้อง พยายาม `sudo kvm -m 3G -hdb /dev/sde -netdev bridge,br=natbr0,id=nb0 -device virtio-net,netdev=nb0` และ `$ sudo kvm -m 3G -hdb /dev/sde -nic bridge,br=natbr0,id=usernet0` และ `$ sudo kvm -m 3G -hdb /dev/sde -nic bridge,br=natbr0,id=usernet0` vm เริ่มต้นแล้ว
t09 avatar
wf flag
t09
บน vm: `$ip a ...3: natbr0: ...ระบุกลุ่ม UNKOWN เริ่มต้น qlen 1,000` _ifconfig_ `natbr0: inet 10.0.2.2 netmask 255.255.255.0 ออกอากาศ 0.0.0.0` _$sudo ip r เพิ่มค่าเริ่มต้นผ่าน 10.0.2.1/24_ `ข้อผิดพลาด: ที่อยู่ที่ถูกต้องใด ๆ ที่คาดหวังมากกว่า "10.0.2.1/24`
Tom Yan avatar
in flag
@t09 นั่นคือการพิมพ์ผิด ไม่ควรใช้ `/24` ในคำสั่งนั้น
Tom Yan avatar
in flag
@t09 มีการพิมพ์ผิดอีก: คำสั่ง `ip a add 10.0.2.2/24` ควรมีบางอย่างเช่น `dev ens3` แทน (ตรวจสอบภายใน VM ด้วย `ip l` เพื่อค้นหาชื่ออินเทอร์เฟซที่จะใช้ ตรวจสอบให้แน่ใจว่าคุณทราบว่า *บล็อกคำสั่งทั้งหมด* ที่ประกอบด้วยคำสั่งควรถูกเรียกใช้ *บน VM*)

โพสต์คำตอบ

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