ENV
multipass version
multipass 1.10.1+mac
multipassd 1.10.1+mac
Mac Apple M1
MacOS 12.5.1
Note: I am including qemu tag as Multipass is using qemu.
I am using two Mac computers, both MacOS M1 client and server.
curl hangs
curl hangs half way through a large file(small file no problem) , if the server is running in multipass on different vlan/network(See step 7. )
curl <--> network <--> host computer <--> multipass vm
Steps
You need to install go on the computer on the different vlan/network and do the following:
- Create multipass vm and mount from the same folder:
multipass launch --name myvm --network=en0
# Mount so you can edit code from host
multipass mount . myvm:~/speed
- Install go
multipass shell myvm
cd speed
sudo snap install go --classic
- Generate a large file:
base64 /dev/urandom | head -c 100000 > file.txt
echo "\The end" >> file.txt
Note: Using one zero less base64 /dev/urandom | head -c 10000 > file.txt then there is no problem.
- Create the following go file
main.goin the same folder:
package main
import (
"github.com/gorilla/mux"
"log"
"net/http"
)
func main() {
handler := mux.NewRouter()
handler.PathPrefix("/").Handler(http.StripPrefix("/", http.FileServer(http.Dir("."))))
log.Fatal(http.ListenAndServe(":80", handler))
}
- Run go on multipass myvm on different vlan/network
go mod init test
go get
sudo go run main.go
From client machine on another vlan/network
- Curl to multipass mvm, IMPORTANT to multipass ip address, on the network(--network=en0), from "another" machine:
curl <ip>/file.txt
In my case: `curl 192.170.1.231/file`
7AVzmECVWNbcShP+TE+/6AM/KZWc12AzLKvtctv0pqeSW0SNDW3OSM82SkzF+/UExUUBH4dxlIcM
dObLOlLgz9WfoiEtvZ4Hbx/yq85C+WwnFr2Trhu75qmFrg8Ht8t/x+MyDfI0MyuGw91tKqFgHL4F
Now it hangs, what to do?
If you run this on the multipss host computer(same ip address) it works, just not from multipass vm - again between networks.
Note: multipass list:
Name State IPv4 Image
mvm Running 192.168.64.132 Ubuntu 20.04 LTS
192.170.1.231
TCP Previous segment not captured
If I use Wireshark I can see something standing out right about where it hangs:
10287 0.000580 0.000580 64 192.168.1.22 192.170.1.231 TCP 54 53941 → 80 [RST] Seq=1 Win=0 Len=0
4818 0.004338 0.004338 62 192.170.1.231 192.168.1.22 TCP 1514 [TCP Previous segment not captured] 80 → 50623 [ACK] Seq=84853 Ack=86 Win=65152 Len=1448 TSval=1019606200 TSecr=2732723127 [TCP segment of a reassembled PDU]
4820 0.000249 0.000249 64 192.168.1.22 192.170.1.231 TCP 78 [TCP Dup ACK 4817#1] 50623 → 80 [ACK] Seq=86 Ack=67477 Win=131072 Len=0 TSval=2732723132 TSecr=1019605978 SLE=84853 SRE=86301
4821 0.000057 0.000057 64 192.168.1.22 192.170.1.231 TCP 78 [TCP Dup ACK 4817#2] 50623 → 80 [ACK] Seq=86 Ack=67477 Win=131072 Len=0 TSval=2732723132 TSecr=1019605978 SLE=84853 SRE=87749
4822 0.002414 0.002414 62 192.170.1.231 192.168.1.22 TCP 1514 [TCP Fast Retransmission] 80 → 50623 [ACK] Seq=67477 Ack=86 Win=65152 Len=1448 TSval=1019606202 TSecr=2732723132 [TCP segment of a reassembled PDU]
4823 0.000001 0.000001 62 192.170.1.231 192.168.1.22 TCP 1514 [TCP Out-Of-Order] 80 → 50623 [ACK] Seq=68925 Ack=86 Win=65152 Len=1448 TSval=1019606203 TSecr=2732723132 [TCP segment of a reassembled PDU]
4827 0.002141 0.002141 62 192.170.1.231 192.168.1.22 TCP 1514 [TCP Out-Of-Order] 80 → 50623 [ACK] Seq=70373 Ack=86 Win=65152 Len=1448 TSval=1019606205 TSecr=2732723135 [TCP segment of a reassembled PDU]
4829 0.000165 0.000165 62 192.170.1.231 192.168.1.22 TCP 1514 [TCP Retransmission] 80 → 50623 [PSH, ACK] Seq=71821 Ack=86 Win=65152 Len=1448 TSval=1019606205 TSecr=2732723135
4830 0.000002 0.000002 62 192.170.1.231 192.168.1.22 TCP 1514 [TCP Retransmission] 80 → 50623 [ACK] Seq=73269 Ack=86 Win=65152 Len=1448 TSval=1019606205 TSecr=2732723135
4831 0.000000 0.000000 62 192.170.1.231 192.168.1.22 TCP 1514 [TCP Retransmission] 80 → 50623 [ACK] Seq=74717 Ack=86 Win=65152 Len=1448 TSval=1019606205 TSecr=2732723135
Thanks