Я пытаюсь сделать rumpkernel ( https://github.com/rumpkernel ) запустить на KVM, подключиться к сокету на хосте и отправить некоторые данные
Я могу сделать хост доступом к гостю, используя пример nginx здесь: https://github.com/rumpkernel/wiki/wiki/Tutorial%3A-Serve-a-static-website-as-a-Unikernel
Практически то, что я делаю, это:
ip tuntap add tap0 mode tap
ip addr add 10.0.0.10/24 dev tap0
ip link set dev tap0 up
Затем запустите rumprun с параметрами:
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>
Где скрипт python открывает сокет (0.0.0.0:2010) и слушает. Тогда на хосте я могу сделать:
nc 10.0.0.11 2010
И я вижу, что это соединяет. Проблема в том, что я не могу поступить наоборот. Теперь у меня есть kvm guest, открывающий сокет и пытающийся подключиться:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
ip = "10.0.0.10"
try:
s.connect( (ip, 9999) )
#send some data
И запускает тот же скрипт, который прослушивает, как и раньше, привязка к 10.0.0.10:9999. Гость просто застревает при попытке подключения и в конечном итоге время ожидания.
Я перепробовал почти все, что смог найти в сети, в итоге получил мост с IP 10.0.0.10 и добавил к нему tap0. Затем я выследил br0 и получил следующее (удалил несколько строк):
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
Что заставляет меня думать, что есть маршрут, но каким-то образом пакет не достигает. Я пытался отключить фильтрацию в sys.d
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
И все еще ничего.
Любые идеи о том, как сделать это работает? Я не хочу соединять мой eth0, потому что это удаленный сервер, и гостю не нужны внешние соединения в данный момент
источник