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.