起動方法の説明に従ってください。QEMUを使用したOpenWrt仮想マシン、ダウンロードしましたMIPSコア次に始めてください。
qemu-system-mips -kernel openwrt-22.03.3-malta-be-vmlinux-initramfs.elf -nographic -m 256
ただし、仮想マシンにはインターネット接続はありません。
root@(none):/# ping google.com
ping: bad address 'google.com'
QEMUでホストインターネット接続を使用する方法は?
編集する
コメントで提案されているようにping
ICMPを使用するため、機能しません。ただし、wget
使用時に次のエラーが発生します。
root@OpenWrt:~# wget http://google.com/
Downloading 'http://google.com/'
Failed to send request: Operation not permitted
ネットワーク構成は次のとおりです。
root@OpenWrt:~# ifconfig
br-lan Link encap:Ethernet HWaddr 52:54:00:12:34:56
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::5054:ff:fe12:3456/64 Scope:Link
inet6 addr: fd02:a553:49cb::1/60 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1248 (1.2 KiB) TX bytes:2822 (2.7 KiB)
eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1290 (1.2 KiB) TX bytes:2822 (2.7 KiB)
Interrupt:10 Base address:0x1060
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:528 errors:0 dropped:0 overruns:0 frame:0
TX packets:528 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:40288 (39.3 KiB) TX bytes:40288 (39.3 KiB)
答え1
OPはネットワーク設定を提供していないので:
qemu-system-mips -kernel openwrt-22.03.3-malta-be-vmlinux-initramfs.elf -nographic -m 256
これにより、の説明に従って最小ユーザーモードが選択されます。QEMUのネットワーク基本:
QEMU内のネットワークは2つの部分で構成されています。
- ゲストに提供される仮想ネットワークデバイス(PCIネットワークカードなど)。
- エミュレートされたNICと対話するネットワークバックエンド(たとえば、ホストネットワークにパケットを入れる)。
各セクションには一連のオプションがあります。
-net nic -net user
デフォルトでは、QEMUはコマンドラインに入力するようにゲスト用のSLiRPユーザーネットワークバックエンドと適切な仮想ネットワークデバイス(たとえば、ほとんどのx86 PCゲスト用のE1000 PCIカード)を作成します。
これユーザーモードネットワークVMの観点から見ると、次のようになります。
guest (10.0.2.15) <------> Firewall/DHCP server <-----> Internet | (10.0.2.2) | ----> DNS server (10.0.2.3) | ----> SMB server (10.0.2.4)
QEMUはTCP、UDP、および一部のサーバーを処理できますが、DHCPおよびDNSサーバーは処理できません。特に、これはICMPを処理しません。
注 – (既定) SLiRP ユーザーネットワークを使用している場合
ping
(ICMP) は機能しませんが、TCP および UDP は機能します。ping
QEMUネットワーク構成をテストしようとしないでください。!
これはパケットを追跡し、ホストのソケットを使用して仮想マシンの動作をエミュレートすることによってこれを行います。仮想マシンがパケットを送信すると、QEMUはソケットを開いて同じパケットを送信します(もちろん、より複雑なのはTCPです)。実際、仮想マシンのソースIPアドレスはほとんど無視されます。
仮想マシンのオペレーティングシステムはルーターを実行するように設計されているため、これを認識せず、次のデフォルト設定に従います。
- DHCPを使用しない
eth0
ブリッジポートとして設定br-vlan
- 固定IPアドレス割り当て
br-vlan
: 192.168.1.1/24
デフォルトパスがないため、仮想マシンは通信を試みません。つまり、利用可能なパスがないことがわかります。
DHCPを使用している場合は、10.0.2.15/24でこのアドレスを受信し、eth0
10.0.2.2をゲートウェイのデフォルトパスとして使用します。これは、ユーザーモードのネットワークスタックエミュレーションで使用されるデフォルトです。
したがって、現在の設定で正しいゲートウェイを使用してこれらのデフォルトパスを実行する最小の対応するコマンドは次のとおりです。
ip route add default via 10.0.2.2 dev br-lan onlink
(onlink
最初に10.0.2.2にパスを追加する手順をスキップします。)eth0を最初に削除すると、同じことができますbr-lan
。
ip link del br-lan
それから:
root@OpenWrt:/# udhcpc -i eth0
udhcpc: started, v1.35.0
udhcpc: broadcasting discover
udhcpc: broadcasting select for 10.0.2.15, server 10.0.2.2
udhcpc: lease of 10.0.2.15 obtained from 10.0.2.2, lease time 86400
udhcpc: ip addr add 10.0.2.15/255.255.255.0 broadcast + dev eth0
udhcpc: setting default routers: 10.0.2.2
これはDNSを設定しません(あまりにもudhcpc
制限的なようです)。さらに:
echo nameserver 10.0.2.3 > /etc/resolv.conf
これで、次の操作が許可されます。
root@OpenWrt:/# wget http://google.com/
Downloading 'http://google.com/'
Connecting to 142.250.76.110:80
Redirected to / on www.google.com
Writing to 'index.html'
これはそれほど遠くないでしょう。これにより、ルーター機能をテストできなくなります。
さらに重要なことは、ネットワークのすべての部分が完全に構成されている必要があり、全体の使用のために仮想マシンに複数のネットワークカードを提供できることです。 QEMUのドキュメントで詳細を読んでください。必ず使用してくださいTAPネットワークバックエンド。これは理解が必要です。設定方法:
バラより祈るTAPネットワークインターフェースの使用に関するコマンドラインの例をご覧ください。
これを行うには、仮想マシン自体を実行しているハイパーバイザーシステムに正しいネットワークが設定されている必要があるため、これらのリソースの一部を仮想マシンに提供できる必要があります(十分なネットワークオプションを含む)。
たとえば、rootとしてこのコマンドを実行すると、仮想マシンに2つのNICが提供されます。
qemu-system-mips \
-kernel openwrt-22.03.3-malta-be-vmlinux-initramfs.elf \
-netdev tap,id=n1,ifname=tapn1 -device pcnet,netdev=n1 \
-netdev tap,id=n2,ifname=tapn2 -device pcnet,netdev=n2 \
-nographic -m 256
その後、2番目のNICをホスト上の既存のブリッジに接続できます。たとえば、LXCも使用されている場合は、次のことができますlxcbr0
。
ip link set tapn2 master lxcbr0
他の一部のQEMUオプションは、単一のコマンド呼び出しでこれを実行できます。同様に、特権を持つ一部のQEMUヘルパーを使用すると、root以外のユーザーとしてコマンドを再実行できます。
LXCではDHCP(およびDNS)がすでに提供されているため、lxcbr0
VMではDHCPが許可されます。
udhcpc -i eth1
ping 8.8.8.8
ホストが接続を提供する限り、このような操作も機能します。前の例のようにDNSを手動で設定する必要があります。
もちろん、OpenWRT独自の構成方法を使用する必要があります。