나는 QEMU(당시에는...)에서 SunOS 4.1.4를 실행하고 있으며 tap
호스트 시스템의 장치를 통해 네트워킹하고 있습니다. 이렇게 가상 머신을 시작합니다 ...
qemu-system-sparc \
-rtc base=utc \
-drive file=sunos-root.img,format=raw,bus=0,unit=0 \
-drive file=sunos-home.img,format=raw,bus=0,unit=1 \
-drive file=sunos-gnu.img,format=raw,bus=0,unit=2 \
-nic tap,br=virbr0,helper=/usr/libexec/qemu-bridge-helper \
-nographic
...간헐적으로 작동하는 것처럼 보이는 네트워크를 제외하고는 모든 것이 잘 실행되고 있습니다.
SunOS가 시작되면 무엇보다도 .telnet 서버와 rshell 서버를 통해 실행됩니다 inetd
. Tap 인터페이스는 브리지 virbr0
( 192.1681.22.1
)에 연결되고 SunOS 가상 머신은 다음과 같이 할당됩니다 192.168.122.103
.
bash-3.2# ifconfig le0
le0: flags=63<UP,BROADCAST,NOTRAILERS,RUNNING>
inet 192.168.122.103 netmask ffffff00 broadcast 192.168.122.255
ether 52:54:0:12:34:56
운이 좋으면 호스트에서 간단히 다운로드할 수 있고 telnet 192.168.122.103
작동할 것입니다. rsh
다른 경우에는 그렇지 않으며 그 이유를 이해하지 못합니다. 이것을 루프로 실행하면 ...
while ! rsh -l root 192.168.122.103 /bin/true; do
sleep 1
done
... 그럴 것이다마지막으로일하다.
아웃바운드 트래픽~에서가상 머신은 항상 작동합니다(예: 호스트에서 배너를 안정적으로 telnet 192.168.122.1 22
얻을 수 있습니다 SSH-2.0-OpenSSH...
). tcpdump
가상 머신에 텔넷을 연결할 수 없을 때 Tap 인터페이스에서 실행하면 다음이 표시됩니다.
18:39:07.584861 IP 192.168.122.1.40270 > 192.168.122.103.telnet: Flags [S], seq 2038492576, win 64240, options [mss 1460,sackOK,TS val 2376785260 ecr 0,nop,wscale 7], length 0
18:39:07.585177 IP 192.168.122.103.telnet > 192.168.122.1.40270: Flags [S.], seq 2034944001, ack 2038492577, win 4096, options [mss 1460], length 0
18:39:07.585205 IP 192.168.122.1.40270 > 192.168.122.103.telnet: Flags [.], ack 1, win 64240, length 0
18:39:07.585279 IP 192.168.122.1.40270 > 192.168.122.103.telnet: Flags [P.], seq 1:28, ack 1, win 64240, length 27 [telnet DO SUPPRESS GO AHEAD, WILL TERMINAL TYPE, WILL NAWS, WILL TSPEED, W
ILL LFLOW, WILL LINEMODE, WILL NEW-ENVIRON, DO STATUS, WILL XDISPLOC [|telnet]
18:39:07.773325 IP 192.168.122.103.telnet > 192.168.122.1.40270: Flags [.], ack 28, win 4069, length 0
18:39:10.323018 IP 192.168.122.1.40270 > 192.168.122.103.telnet: Flags [P.], seq 28:30, ack 1, win 64240, length 2
18:39:10.373287 IP 192.168.122.103.telnet > 192.168.122.1.40270: Flags [.], ack 30, win 4067, length 0
18:39:11.401927 IP 192.168.122.1.40270 > 192.168.122.103.telnet: Flags [P.], seq 30:32, ack 1, win 64240, length 2
18:39:11.573256 IP 192.168.122.103.telnet > 192.168.122.1.40270: Flags [.], ack 32, win 4065, length 0
18:39:12.672424 IP 192.168.122.1.40270 > 192.168.122.103.telnet: Flags [P.], seq 32:34, ack 1, win 64240, length 2
18:39:12.773266 IP 192.168.122.103.telnet > 192.168.122.1.40270: Flags [.], ack 34, win 4063, length 0
보시다시피 트래픽이 앞뒤로 오가는 것 같지만 여전히 작동하지 않습니다. 작동할 때의 모습은 다음과 같습니다.
18:41:38.435167 IP 192.168.122.1.40282 > 192.168.122.103.telnet: Flags [S], seq 404147648, win 64240, options [mss 1460,sackOK,TS val 2376936111 ecr 0,nop,wscale 7], length 0
18:41:38.435489 IP 192.168.122.103.telnet > 192.168.122.1.40282: Flags [S.], seq 2054336001, ack 404147649, win 4096, options [mss 1460], length 0
18:41:38.435525 IP 192.168.122.1.40282 > 192.168.122.103.telnet: Flags [.], ack 1, win 64240, length 0
18:41:38.435585 IP 192.168.122.1.40282 > 192.168.122.103.telnet: Flags [P.], seq 1:28, ack 1, win 64240, length 27 [telnet DO SUPPRESS GO AHEAD, WILL TERMINAL TYPE, WILL NAWS, WILL TSPEED, W
ILL LFLOW, WILL LINEMODE, WILL NEW-ENVIRON, DO STATUS, WILL XDISPLOC [|telnet]
18:41:38.459878 IP 192.168.122.103.telnet > 192.168.122.1.40282: Flags [P.], seq 1:4, ack 28, win 4069, length 3 [telnet DO TERMINAL TYPE [|telnet]
18:41:38.459971 IP 192.168.122.1.40282 > 192.168.122.103.telnet: Flags [.], ack 4, win 64237, length 0
18:41:38.460564 IP 192.168.122.103.telnet > 192.168.122.1.40282: Flags [P.], seq 4:34, ack 28, win 4096, length 30 [telnet WILL SUPPRESS GO AHEAD, DONT NAWS, DONT TSPEED, DONT LFLOW, DONT LI
NEMODE, DONT NEW-ENVIRON, WONT STATUS, DONT XDISPLOC, SB TERMINAL TYPE SEND SE [|telnet]
보시다시피 이번에는 Telnet 프로토콜 교환이 성공적으로 완료되었습니다.
이것은 방화벽 문제가 아닙니다( 제한 없이 -j ACCEPT
체인 상단에 규칙을 추가했는데 이 트래픽이 체인에 도달하지 않습니다 ).INPUT
OUTPUT
FORWARD
어쩌면 QEMU 랜스 이더넷 드라이버에 뭔가 문제가 있는 것일까요?