Unikernel của khách trên KVM không thể truy cập máy chủ, nhưng máy chủ có thể tiếp cận khách


0

Tôi đang cố gắng tạo một rumpkernel ( https://github.com/rumpkernel ) chạy trên KVM, kết nối với một ổ cắm trên máy chủ và gửi một số dữ liệu.

Tôi có thể làm cho máy chủ truy cập vào khách bằng ví dụ nginx tại đây: https://github.com/rumpkernel/wiki/wiki/Tutorial%3A-Serve-a-static-website-as-a-Unikernel

Khá nhiều thứ tôi làm là:

ip tuntap add tap0 mode tap
ip addr add 10.0.0.10/24 dev tap0
ip link set dev tap0 up 

Sau đó khởi chạy rumprun với các tham số:

rumprun kvm -i -M 128 \
        -I if,vioif,'-net tap,script=no,ifname=tap0'\
        -W if,inet,static,10.0.0.11/24 \
        -b images/data.iso,/data \
        -- <my python script>

Trong đó tập lệnh python mở một socket (0.0.0.0:2010) và lắng nghe. Sau đó, trên máy chủ, tôi có thể làm:

nc 10.0.0.11 2010

Và tôi có thể thấy nó kết nối. Vấn đề là tôi không thể làm theo cách khác. Bây giờ tôi có khách kvm đang mở một ổ cắm và cố gắng kết nối:

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:                                                                                       
   ip = "10.0.0.10"
   try:
       s.connect( (ip, 9999) )
       #send some data

Và chạy cùng một kịch bản nghe như trước, ràng buộc vào 10.0.0.10:9999. Người khách chỉ bị mắc kẹt khi cố gắng kết nối và cuối cùng đã hết thời gian.

Tôi đã thử hầu hết mọi thứ tôi có thể tìm thấy trực tuyến, kết thúc bằng một cây cầu có IP 10.0.0.10 và thêm tap0 vào nó. Sau đó, tôi rình mò br0 và nhận được những điều sau đây (đã xóa một số dòng):

15:38:46.173914 ARP, Request who-has 10.0.0.11 tell 10.0.0.11, length 28
...
15:38:46.500262 ARP, Request who-has 10.0.0.10 tell 10.0.0.11, length 28
15:38:46.500288 ARP, Reply 10.0.0.10 is-at 0e:ec:XX:XX:XX:XX (oui Unknown), length 28
15:38:46.500440 IP 10.0.0.11.52886 > 10.0.0.10.9999: Flags [S], seq 20858086, win 32768, options [mss 1460,nop,wscale 3,sackOK,nop,nop,nop,nop,TS val 1 ecr 0], length 0

Điều này khiến tôi nghĩ rằng có một tuyến đường, nhưng bằng cách nào đó gói không đạt được. Tôi đã thử vô hiệu hóa tính năng lọc trong sys.d

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

Và vẫn không có gì.

Bất kỳ ý tưởng về làm thế nào để làm việc này? Tôi không muốn kết nối eth0 của mình vì đây là máy chủ từ xa và khách không cần kết nối bên ngoài tại thời điểm này.

Câu trả lời:


0

Welp, đã cố gắng giải quyết điều này trong một ngày và sau khi tôi gửi câu hỏi ở đây tôi tìm thấy câu trả lời.

Gợi ý là trong việc này: Định cấu hình FirewallD để cho phép truy cập mạng máy ảo được bắc cầu

Tôi đã kiểm tra iptables và nhật ký, và tìm thấy cái này trên /var/log/ufw.log

Dec  5 15:38:46 xxxx kernel: [516010.193395] [UFW BLOCK] IN=br0 OUT= MAC=... SRC=10.0.0.11 DST=10.0.0.10 LEN=64 TOS=0x00 PREC=0x00 TTL=64 ID=

0 DF PROTO = TCP SPT = 52886 DPT = 9999 WINDOW = 32768 RES = 0x00 SYN URGP = 0

Hóa ra có một tường lửa đang chạy, và nó đã chặn kết nối. Tôi đã thêm một quy tắc mới như được chỉ định ở đây: https://help.ubfox.com/community/UFW và nó hiện đang hoạt động. Rõ ràng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.