qemu & dedicated nic + macvtap#
docs ini memahas solusi agar bisa akses tap (dari vm) tetapi hw yang diakses adalah nic asli, diusahakan tanpa bridge dan NAT NAT
ADA 2 strategi
add iface fisik ke bridge, lalu attach bridge tersebut ke vm.
pakai macvtap, dengan cara meredirect packet yang datang, ke arah tap device menggunakan fd (file descriptor). kita akan (ab)use option
-net
tap di qemu
strategi lain (tidak direkomendasikan, diluar topik macvtap)
membuat virtual eth pair, redirect pakai iptables
pakai -netdev user (somewhat slow, need triage)
normal#
bagian ini tanpa macvtap ataupun hal hal lain dahulu, pure qemu bridging
configuration
eth1: mostly WAN
eth2: tap
qemu-system-x86_64 \
-enable-kvm \
-smp 4 -m 256M \
-drive file=chr7.qcow2,format=qcow2 \
-boot order=d \
-net user,hostfwd=tcp::8291-:8291,hostfwd=tcp::10022-:22 \
-net nic \
-netdev tap,id=net0,ifname=tap0,script=no,downscript=no \
-device virtio-net-pci,netdev=net0,mac=02:11:2a:3b:ff:c3 \
-nographic
qemu-system-x86_64 \
-name guest=ubuntu22.04 \
-machine type=pc,accel=kvm \
-cpu host -m 4G -smp 4 \
-enable-kvm \
-boot order=d \
-drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \
-drive if=pflash,format=raw,file=OVMF_VARS_ubuntu_server_gpt.4m.fd \
-drive file=ubuntu-server.img,format=qcow2 \
-netdev user,id=net0,hostfwd=tcp::20022-:22,hostfwd=tcp::10000-:5432,hostfwd=tcp::10302-:10302 \
-device virtio-net-pci,netdev=net0 \
-netdev tap,id=net1,ifname=tap1,script=no,downscript=no \
-device virtio-net-pci,netdev=net1,mac=02:11:2a:3b:aa:c4 \
-nographic
network stack note:
ens3: come from qemu bridge (for ssh purpose)
ens4: come from tap1 (connected to bridge, internal lan)
netplan configuration
network:
version: 2
ethernets:
ens4:
addresses:
- 192.168.1.2/24
routes:
- to: default
via: 192.168.1.1
ens3:
dhcp4: true
// ip a
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
altname enp0s3
inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic ens3
valid_lft 86314sec preferred_lft 86314sec
inet6 fec0::5054:ff:fe12:3456/64 scope site dynamic mngtmpaddr noprefixroute
valid_lft 86317sec preferred_lft 14317sec
inet6 fe80::5054:ff:fe12:3456/64 scope link
valid_lft forever preferred_lft forever
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 02:11:2a:3b:aa:c4 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 192.168.1.2/24 brd 192.168.1.255 scope global ens4
valid_lft forever preferred_lft forever
inet6 fe80::11:2aff:fe3b:aac4/64 scope link
valid_lft forever preferred_lft forever