{"id":480669,"date":"2026-05-22T13:01:15","date_gmt":"2026-05-22T13:01:15","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=480669"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=480669","title":{"rendered":"\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0430\u044f \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041a\u0430\u0436\u0434\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430 \u0434\u043b\u044f \u0430\u0433\u0435\u043d\u0442\u043e\u0432. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b Linux: namespaces, seccomp, cgroups \u0438 Landlock. \u042d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u0435\u0437\u043d\u044b, \u043d\u043e \u043e\u043d\u0438 \u0434\u0435\u043b\u044f\u0442 \u043e\u0434\u043d\u043e \u044f\u0434\u0440\u043e \u0441 \u0445\u043e\u0441\u0442\u043e\u043c \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u043a \u0445\u043e\u0441\u0442\u0430. \u041f\u043e\u043b\u043d\u0430\u044f microVM \u0434\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u0442\u043a\u0443\u044e \u0433\u0440\u0430\u043d\u0438\u0446\u0443: \u044f\u0434\u0440\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b \u0441\u0430\u043c\u0438 \u0432\u044b\u0431\u0440\u0430\u043b\u0438, \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0434\u0438\u0441\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043b\u0438\u043d\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0438 \u043e\u0442\u043a\u0430\u0437, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0445\u043e\u0441\u0442\u0430.<\/p>\n<p><a href=\"https:\/\/github.com\/ingresslabs\/firecracker-sandbox.git\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/ingresslabs\/firecracker-sandbox.git<\/a><\/p>\n<p>Firecracker \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0432\u0438\u0434\u043d\u0430. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 Linux, ext4 \u0434\u0438\u0441\u043a\u0430, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 Firecracker \u0438 tap \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 <code>tap0<\/code> \u043d\u0430 \u0445\u043e\u0441\u0442\u0435. \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0435 \u043f\u0440\u044f\u0447\u0435\u0442\u0441\u044f \u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u044c\u044e. \u0423 \u0445\u043e\u0441\u0442\u0430 \u0430\u0434\u0440\u0435\u0441 <code>192.168.1.1<\/code>. \u0423 \u0433\u043e\u0441\u0442\u044f \u0430\u0434\u0440\u0435\u0441 <code>192.168.1.2<\/code>. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442.<\/p>\n<p>\u042f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u043d\u0430 <code>root@121.115.45.227<\/code>. \u042d\u0442\u043e Ubuntu 22.04 \u0441 <code>\/dev\/kvm<\/code>, 16 CPU, Firecracker 1.15.1, <code>make<\/code>, <code>gcc<\/code>, <code>screen<\/code> \u0438 <code>iptables<\/code>. \u0421\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u0431\u044b\u043b\u043e Linux <code>7.0.9<\/code>. \u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 <code>vmlinux<\/code> \u0437\u0430\u043d\u044f\u043b 49 MB. \u0412\u041c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0430 Debian 11 \u0434\u043e multi user \u0440\u0435\u0436\u0438\u043c\u0430 \u0438 \u0432\u043e\u0448\u043b\u0430 \u043a\u0430\u043a root \u0447\u0435\u0440\u0435\u0437 <code>ttyS0<\/code>.<\/p>\n<p>\u042d\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e: \u044f\u0434\u0440\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0434\u0438\u0441\u043a \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, serial console \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0441\u0435\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0441 \u0445\u043e\u0441\u0442\u0430.<\/p>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u044f\u0434\u0440\u0430<\/h3>\n<p>\u0412 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0446\u0435\u043b\u044c Makefile:<\/p>\n<pre><code class=\"bash\">make build-kernel<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 stable \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 Linux, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441 <code>make defconfig<\/code> \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u044b Firecracker: virtio block, virtio net, virtio PCI, virtio MMIO, ext4, devtmpfs \u0438 serial console. Serial console \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0443\u043a\u0440\u0430\u0448\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0433\u043e\u0441\u0442\u044c \u043f\u0430\u0434\u0430\u0435\u0442 \u0434\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0441\u0435\u0442\u0438, <code>ttyS0<\/code> \u0438 <code>firecracker-console.log<\/code> \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443.<\/p>\n<p>\u0411\u0430\u0437\u043e\u0432\u044b\u0439 config \u0448\u0438\u0440\u043e\u043a\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0431\u043e\u0440\u043a\u0430 \u043d\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f. \u041d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0445\u043e\u0441\u0442\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0431\u0440\u0430\u043b \u043f\u043e\u043b\u043d\u044b\u0439 x86 kernel \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b <code>vmlinux<\/code> \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b. \u0414\u043b\u044f \u0441\u0442\u0440\u043e\u0433\u043e\u0439 production \u0441\u0431\u043e\u0440\u043a\u0438 \u043b\u0443\u0447\u0448\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 kernel config \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c <code>make olddefconfig<\/code> \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439. \u0414\u043b\u044f \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430<\/h3>\n<p>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0442\u0430\u043a\u043e\u0439:<\/p>\n<pre><code class=\"bash\">make build-simple-rootfs<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u0430 \u0446\u0435\u043b\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u0442 <code>firecracker-rootfs.ext4<\/code>, \u0441\u0442\u0430\u0432\u0438\u0442 Debian \u0441 systemd, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u0445\u043e\u0434 root \u0447\u0435\u0440\u0435\u0437 serial console \u0438 \u043f\u0438\u0448\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u043b\u044f <code>eth0<\/code>. \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0434\u0432\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u043a\u0438. \u0426\u0435\u043b\u044c \u043f\u044b\u0442\u0430\u043b\u0430\u0441\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c <code>mnt\/etc\/network\/interfaces<\/code> \u0434\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <code>mnt\/etc\/network<\/code>. \u0415\u0449\u0435 \u0432 rootfs \u0431\u044b\u043b \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 mount <code>virtiofs<\/code>, \u0445\u043e\u0442\u044f \u0432 \u044f\u0434\u0440\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0433\u043e\u0441\u0442\u044f. \u041d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0434\u043e \u0437\u0430\u043f\u0438\u0441\u0438 interface file. \u041e\u0431\u0449\u0438\u0439 mount \u0441\u0442\u043e\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d <code>CONFIG_VIRTIO_FS<\/code>.<\/p>\n<p>\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 <code>vm-config.json<\/code> \u043f\u0440\u043e\u0441\u0442\u044b\u0435:<\/p>\n<pre><code class=\"json\">\"kernel_image_path\": \".\/vmlinux\",\"boot_args\": \"console=ttyS0 reboot=k panic=1 pci=off root=\/dev\/vda rw rootfstype=ext4 init=\/lib\/systemd\/systemd\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043c\u0435\u0436\u0434\u0443 \u044f\u0434\u0440\u043e\u043c \u0438 \u0434\u0438\u0441\u043a\u043e\u043c. Firecracker \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 <code>vmlinux<\/code>, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 root image \u043a\u0430\u043a <code>\/dev\/vda<\/code> \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432 screen log.<\/p>\n<h3>\u041f\u043e\u0434\u044a\u0435\u043c \u0441\u0435\u0442\u0438<\/h3>\n<p>Makefile \u0441\u043e\u0437\u0434\u0430\u0435\u0442 <code>tap0<\/code>, \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 <code>192.168.1.1\/24<\/code>, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 forwarding \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 NAT. \u041d\u0430 \u0445\u043e\u0441\u0442\u0430\u0445 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 default route \u043d\u0430\u0438\u0432\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>iptables<\/code> \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 interface \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u0435\u043d. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043b\u0443\u0447\u0448\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u044f\u0432\u043d\u043e:<\/p>\n<pre><code class=\"bash\">WAN=$(ip route | awk '\/^default\/ {print $5; exit}')ip tuntap add tap0 mode tapip addr add 192.168.1.1\/24 dev tap0ip link set tap0 upsysctl -w net.ipv4.ip_forward=1iptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o \"$WAN\" -j MASQUERADEiptables -A FORWARD -i tap0 -j ACCEPTiptables -A FORWARD -o tap0 -j ACCEPT<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u0433\u043e\u0441\u0442\u044f \u043d\u0443\u0436\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0441\u0435\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b:<\/p>\n<pre><code class=\"bash\">ip link set eth0 upip addr replace 192.168.1.2\/24 dev eth0ip route replace default via 192.168.1.1printf 'nameserver 8.8.8.8\\n' &gt; \/etc\/resolv.conf<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 <code>resolv.conf<\/code> \u0432\u0430\u0436\u0435\u043d. \u0412 \u043e\u0434\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>nameserver 8.8.8.8n<\/code>, \u0438 <code>curl<\/code> \u043d\u0435 \u043c\u043e\u0433 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c <a href=\"http:\/\/opencode.ai\" rel=\"noopener noreferrer nofollow\"><code>opencode.ai<\/code><\/a>.<\/p>\n<h3>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0412\u041c<\/h3>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 screen \u0441\u0435\u0441\u0441\u0438\u0438:<\/p>\n<pre><code class=\"bash\">make up-detachedmake login<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u043e\u0441\u0442\u0435 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f NAT \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e:<\/p>\n<pre><code class=\"bash\">screen -L -Logfile firecracker-console.log -dmS firecracker-vm \\  firecracker --api-sock \/tmp\/firecracker.socket --config-file vm-config.json<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043e\u043d\u0441\u043e\u043b\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430, \u0447\u0442\u043e Debian 11 \u0434\u043e\u0448\u0435\u043b \u0434\u043e multi user \u0440\u0435\u0436\u0438\u043c\u0430. Prompt \u0441\u043e\u043e\u0431\u0449\u0438\u043b Linux <code>7.0.9<\/code> \u043d\u0430 x86_64 \u0438 \u0432\u0445\u043e\u0434 root \u0447\u0435\u0440\u0435\u0437 <code>ttyS0<\/code>. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u043e \u0412\u041c \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0430, \u0430 \u043d\u0435 JSON \u0444\u0430\u0439\u043b\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a opencode \u0441 DeepSeek \u0432\u043d\u0443\u0442\u0440\u0438 \u0412\u041c<\/h3>\n<p>\u0417\u0430\u043f\u0440\u043e\u0441 \u0430\u0433\u0435\u043d\u0442\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0434\u0442\u0438 \u0438\u0437 \u0433\u043e\u0441\u0442\u044f, \u0430 \u043d\u0435 \u0441 \u0445\u043e\u0441\u0442\u0430. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <code>\/Users\/antonvkrylov\/work\/blade\/.AI<\/code> \u043a\u0430\u043a \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a provider credentials \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a\u0443 <code>DEEPSEEK_API_KEY<\/code> \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u043e\u0441\u0442\u0435. \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0431\u044b\u043b \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0432 root disk \u043a\u0430\u043a <code>\/root\/.deepseek.env<\/code>. Guest service \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0435\u0433\u043e, \u0437\u0430\u043f\u0438\u0441\u0430\u043b auth \u0434\u043b\u044f opencode \u0432 <code>\/root\/.local\/share\/opencode\/auth.json<\/code>, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u0437\u0430\u0442\u0435\u043c \u0443\u0434\u0430\u043b\u0438\u043b \u043e\u0431\u0430 secret \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>\u0413\u043e\u0441\u0442\u044e \u043d\u0443\u0436\u043d\u044b <code>curl<\/code> \u0438 <code>ca-certificates<\/code>:<\/p>\n<pre><code class=\"bash\">apt-get updateapt-get install -y curl ca-certificates<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0440\u043e\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u0412\u041c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b opencode 1.15.5:<\/p>\n<pre><code class=\"bash\">export OPENCODE_MODEL=deepseek\/deepseek-v4-flashcurl -fsSL https:\/\/opencode.ai\/install -o \/tmp\/opencode-install.shVERSION=1.15.5 bash \/tmp\/opencode-install.sh --no-modify-pathopencode run \\  --model \"$OPENCODE_MODEL\" \\  --agent build \\  --format json \\  --dir \/root\/opencode-proof \\  \"Reply with exactly BLADE_FIRECRACKER_OPENCODE_DEEPSEEK_OK\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c <code>0<\/code>. \u0412 \u043b\u043e\u0433\u0435 opencode \u0431\u044b\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 <code>llm.provider=deepseek<\/code> \u0438 <code>llm.model=deepseek-v4-flash<\/code>. Secret file \u0438 <code>auth.json<\/code> \u0438\u0441\u0447\u0435\u0437\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430: credential material \u0436\u0438\u0432\u0435\u0442 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, provider log \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439, \u043a\u043b\u044e\u0447 \u043d\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432 guest image.<\/p>\n<h3>\u041d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0437\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u043e\u043c opencode<\/h3>\n<p>\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u044c \u043d\u0443\u0436\u043d\u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041e\u043d\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0430\u0433\u0435\u043d\u0442\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u043c. \u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0412\u041c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 capture \u043d\u0430 \u0445\u043e\u0441\u0442\u0435:<\/p>\n<pre><code class=\"bash\">tcpdump -n -i tap0 'host 192.168.1.2 or arp'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 smoke test \u043f\u043e\u0439\u043c\u0430\u043b ARP \u0438 ICMP \u043c\u0435\u0436\u0434\u0443 <code>192.168.1.2<\/code> \u0438 <code>192.168.1.1<\/code>, \u0447\u0442\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u043b\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0443\u0442\u044c \u0433\u043e\u0441\u0442\u044f. \u041f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a opencode \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043f\u0443\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438: DNS \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442 <code>192.168.1.2<\/code> \u043a <code>8.8.8.8<\/code> \u0434\u043b\u044f <a href=\"http:\/\/api.deepseek.com\" rel=\"noopener noreferrer nofollow\"><code>api.deepseek.com<\/code><\/a>, \u043e\u0442\u0432\u0435\u0442 CloudFront, \u0437\u0430\u0442\u0435\u043c TLS \u0441\u0435\u0441\u0441\u0438\u0438 \u043e\u0442 <code>192.168.1.2<\/code> \u043a <code>3.173.21.63:443<\/code>. \u0412 \u0442\u043e\u0439 \u0436\u0435 \u0442\u0440\u0430\u0441\u0441\u0435 \u0431\u044b\u043b \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u043a <a href=\"http:\/\/models.dev\" rel=\"noopener noreferrer nofollow\"><code>models.dev<\/code><\/a> \u0438 <a href=\"http:\/\/registry.npmjs.org\" rel=\"noopener noreferrer nofollow\"><code>registry.npmjs.org<\/code><\/a>.<\/p>\n<p>\u0427\u0435\u0440\u0435\u0437 <code>tcpdump<\/code> \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c prompt \u0438\u043b\u0438 \u043e\u0442\u0432\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e HTTPS \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 payload. \u0417\u0430\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043e\u0431\u044a\u0435\u043c \u0431\u0430\u0439\u0442\u043e\u0432 \u0438 source address. \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b \u044d\u0442\u043e\u0433\u043e \u0447\u0430\u0441\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e: \u0432\u044b\u0437\u043e\u0432 \u0432\u044b\u0448\u0435\u043b \u0438\u0437 \u0412\u041c, \u043f\u0440\u043e\u0448\u0435\u043b \u0447\u0435\u0440\u0435\u0437 <code>tap0<\/code> \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 provider \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0440\u0435\u0434\u0430\u0445<\/h3>\n<p>\u041d\u0430 bare metal Linux Firecracker \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441 KVM. \u041d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043b\u0443\u0447\u0448\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u043e SSH \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0442\u0430\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e KVM \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0445\u043e\u0441\u0442\u0435. \u0412 CI \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>vmlinux<\/code> \u0438 ext4 rootfs, \u0430 \u0432 job \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e network setup, VM boot, opencode \u0438 packet capture. \u041d\u0430 macOS \u0438\u043b\u0438 Windows \u043d\u0443\u0436\u0435\u043d Linux VM \u0441 nested virtualization, \u043b\u0438\u0431\u043e Firecracker \u0441\u0442\u043e\u0438\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c \u0447\u0435\u0440\u0435\u0437 SSH.<\/p>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439: \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e \u044f\u0434\u0440\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0442 \u0434\u0438\u0441\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c agent request \u0438\u0437\u043d\u0443\u0442\u0440\u0438 \u0433\u043e\u0441\u0442\u044f \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 tap interface, \u043f\u043e\u043a\u0430 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1038218\/\">https:\/\/habr.com\/ru\/articles\/1038218\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041a\u0430\u0436\u0434\u0443\u044e \u043d\u0435\u0434\u0435\u043b\u044e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430 \u0434\u043b\u044f \u0430\u0433\u0435\u043d\u0442\u043e\u0432. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b Linux: namespaces, seccomp, cgroups \u0438 Landlock. \u042d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u0435\u0437\u043d\u044b, \u043d\u043e \u043e\u043d\u0438 \u0434\u0435\u043b\u044f\u0442 \u043e\u0434\u043d\u043e \u044f\u0434\u0440\u043e \u0441 \u0445\u043e\u0441\u0442\u043e\u043c \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u043a \u0445\u043e\u0441\u0442\u0430. \u041f\u043e\u043b\u043d\u0430\u044f microVM \u0434\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u0442\u043a\u0443\u044e \u0433\u0440\u0430\u043d\u0438\u0446\u0443: \u044f\u0434\u0440\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b \u0441\u0430\u043c\u0438 \u0432\u044b\u0431\u0440\u0430\u043b\u0438, \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0434\u0438\u0441\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043b\u0438\u043d\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0438 \u043e\u0442\u043a\u0430\u0437, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0445\u043e\u0441\u0442\u0430.https:\/\/github.com\/ingresslabs\/firecracker-sandbox.gitFirecracker \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0432\u0438\u0434\u043d\u0430. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 Linux, ext4 \u0434\u0438\u0441\u043a\u0430, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 Firecracker \u0438 tap \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 tap0 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435. \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0435 \u043f\u0440\u044f\u0447\u0435\u0442\u0441\u044f \u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u044c\u044e. \u0423 \u0445\u043e\u0441\u0442\u0430 \u0430\u0434\u0440\u0435\u0441 192.168.1.1. \u0423 \u0433\u043e\u0441\u0442\u044f \u0430\u0434\u0440\u0435\u0441 192.168.1.2. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442.\u042f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u043d\u0430 root@121.115.45.227. \u042d\u0442\u043e Ubuntu 22.04 \u0441 \/dev\/kvm, 16 CPU, Firecracker 1.15.1, make, gcc, screen \u0438 iptables. \u0421\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u0431\u044b\u043b\u043e Linux 7.0.9. \u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 vmlinux \u0437\u0430\u043d\u044f\u043b 49 MB. \u0412\u041c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0430 Debian 11 \u0434\u043e multi user \u0440\u0435\u0436\u0438\u043c\u0430 \u0438 \u0432\u043e\u0448\u043b\u0430 \u043a\u0430\u043a root \u0447\u0435\u0440\u0435\u0437 ttyS0.\u042d\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e: \u044f\u0434\u0440\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u0434\u0438\u0441\u043a \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, serial console \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0441\u0435\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0441 \u0445\u043e\u0441\u0442\u0430.\u0421\u0431\u043e\u0440\u043a\u0430 \u044f\u0434\u0440\u0430\u0412 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0446\u0435\u043b\u044c Makefile:make build-kernel\u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 stable \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 Linux, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441 make defconfig \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u044b Firecracker: virtio block, virtio net, virtio PCI, virtio MMIO, ext4, devtmpfs \u0438 serial console. Serial console \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0443\u043a\u0440\u0430\u0448\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0433\u043e\u0441\u0442\u044c \u043f\u0430\u0434\u0430\u0435\u0442 \u0434\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0441\u0435\u0442\u0438, ttyS0 \u0438 firecracker-console.log \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443.\u0411\u0430\u0437\u043e\u0432\u044b\u0439 config \u0448\u0438\u0440\u043e\u043a\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0431\u043e\u0440\u043a\u0430 \u043d\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f. \u041d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0445\u043e\u0441\u0442\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0431\u0440\u0430\u043b \u043f\u043e\u043b\u043d\u044b\u0439 x86 kernel \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b vmlinux \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b. \u0414\u043b\u044f \u0441\u0442\u0440\u043e\u0433\u043e\u0439 production \u0441\u0431\u043e\u0440\u043a\u0438 \u043b\u0443\u0447\u0448\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 kernel config \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c make olddefconfig \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439. \u0414\u043b\u044f \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.\u0421\u0431\u043e\u0440\u043a\u0430 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0442\u0430\u043a\u043e\u0439:make build-simple-rootfs\u042d\u0442\u0430 \u0446\u0435\u043b\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u0442 firecracker-rootfs.ext4, \u0441\u0442\u0430\u0432\u0438\u0442 Debian \u0441 systemd, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u0445\u043e\u0434 root \u0447\u0435\u0440\u0435\u0437 serial console \u0438 \u043f\u0438\u0448\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u043b\u044f eth0. \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0434\u0432\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u043a\u0438. \u0426\u0435\u043b\u044c \u043f\u044b\u0442\u0430\u043b\u0430\u0441\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c mnt\/etc\/network\/interfaces \u0434\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f mnt\/etc\/network. \u0415\u0449\u0435 \u0432 rootfs \u0431\u044b\u043b \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 mount virtiofs, \u0445\u043e\u0442\u044f \u0432 \u044f\u0434\u0440\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0433\u043e\u0441\u0442\u044f. \u041d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0434\u043e \u0437\u0430\u043f\u0438\u0441\u0438 interface file. \u041e\u0431\u0449\u0438\u0439 mount \u0441\u0442\u043e\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d CONFIG_VIRTIO_FS.\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 vm-config.json \u043f\u0440\u043e\u0441\u0442\u044b\u0435:&#187;kernel_image_path&#187;: &#171;.\/vmlinux&#187;,&#187;boot_args&#187;: &#171;console=ttyS0 reboot=k panic=1 pci=off root=\/dev\/vda rw rootfstype=ext4 init=\/lib\/systemd\/systemd&#187;\u042d\u0442\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043c\u0435\u0436\u0434\u0443 \u044f\u0434\u0440\u043e\u043c \u0438 \u0434\u0438\u0441\u043a\u043e\u043c. Firecracker \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 vmlinux, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 root image \u043a\u0430\u043a \/dev\/vda \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432 screen log.\u041f\u043e\u0434\u044a\u0435\u043c \u0441\u0435\u0442\u0438Makefile \u0441\u043e\u0437\u0434\u0430\u0435\u0442 tap0, \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 192.168.1.1\/24, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 forwarding \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 NAT. \u041d\u0430 \u0445\u043e\u0441\u0442\u0430\u0445 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 default route \u043d\u0430\u0438\u0432\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 iptables \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 interface \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u0435\u043d. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043b\u0443\u0447\u0448\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u044f\u0432\u043d\u043e:WAN=$(ip route | awk &#8216;\/^default\/ {print $5; exit}&#8217;)ip tuntap add tap0 mode tapip addr add 192.168.1.1\/24 dev tap0ip link set tap0 upsysctl -w net.ipv4.ip_forward=1iptables -t nat -A POSTROUTING -s 192.168.1.0\/24 -o &#171;$WAN&#187; -j MASQUERADEiptables -A FORWARD -i tap0 -j ACCEPTiptables -A FORWARD -o tap0 -j ACCEPT\u0412\u043d\u0443\u0442\u0440\u0438 \u0433\u043e\u0441\u0442\u044f \u043d\u0443\u0436\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0441\u0435\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b:ip link set eth0 upip addr replace 192.168.1.2\/24 dev eth0ip route replace default via 192.168.1.1printf &#8216;nameserver 8.8.8.8\\n&#8217; &gt; \/etc\/resolv.conf\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 resolv.conf \u0432\u0430\u0436\u0435\u043d. \u0412 \u043e\u0434\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 nameserver 8.8.8.8n, \u0438 curl \u043d\u0435 \u043c\u043e\u0433 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c opencode.ai.\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0412\u041c\u0417\u0430\u043f\u0443\u0441\u043a \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 screen \u0441\u0435\u0441\u0441\u0438\u0438:make up-detachedmake login\u041d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u043e\u0441\u0442\u0435 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f NAT \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e:screen -L -Logfile firecracker-console.log -dmS firecracker-vm \\  firecracker &#8212;api-sock \/tmp\/firecracker.socket &#8212;config-file vm-config.json\u041a\u043e\u043d\u0441\u043e\u043b\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430, \u0447\u0442\u043e Debian 11 \u0434\u043e\u0448\u0435\u043b \u0434\u043e multi user \u0440\u0435\u0436\u0438\u043c\u0430. Prompt \u0441\u043e\u043e\u0431\u0449\u0438\u043b Linux 7.0.9 \u043d\u0430 x86_64 \u0438 \u0432\u0445\u043e\u0434 root \u0447\u0435\u0440\u0435\u0437 ttyS0. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u043e \u0412\u041c \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0430, \u0430 \u043d\u0435 JSON \u0444\u0430\u0439\u043b\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043a\u0438.\u0417\u0430\u043f\u0443\u0441\u043a opencode \u0441 DeepSeek \u0432\u043d\u0443\u0442\u0440\u0438 \u0412\u041c\u0417\u0430\u043f\u0440\u043e\u0441 \u0430\u0433\u0435\u043d\u0442\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0434\u0442\u0438 \u0438\u0437 \u0433\u043e\u0441\u0442\u044f, \u0430 \u043d\u0435 \u0441 \u0445\u043e\u0441\u0442\u0430. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \/Users\/antonvkrylov\/work\/blade\/.AI \u043a\u0430\u043a \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a provider credentials \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a\u0443 DEEPSEEK_API_KEY \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0445\u043e\u0441\u0442\u0435. \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0431\u044b\u043b \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0432 root disk \u043a\u0430\u043a \/root\/.deepseek.env. Guest service \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0435\u0433\u043e, \u0437\u0430\u043f\u0438\u0441\u0430\u043b auth \u0434\u043b\u044f opencode \u0432 \/root\/.local\/share\/opencode\/auth.json, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u0437\u0430\u0442\u0435\u043c \u0443\u0434\u0430\u043b\u0438\u043b \u043e\u0431\u0430 secret \u0444\u0430\u0439\u043b\u0430.\u0413\u043e\u0441\u0442\u044e \u043d\u0443\u0436\u043d\u044b curl \u0438 ca-certificates:apt-get updateapt-get install -y curl ca-certificates\u0417\u0430\u043f\u0440\u043e\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u0412\u041c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b opencode 1.15.5:export OPENCODE_MODEL=deepseek\/deepseek-v4-flashcurl -fsSL https:\/\/opencode.ai\/install -o \/tmp\/opencode-install.shVERSION=1.15.5 bash \/tmp\/opencode-install.sh &#8212;no-modify-pathopencode run \\  &#8212;model &#171;$OPENCODE_MODEL&#187; \\  &#8212;agent build \\  &#8212;format json \\  &#8212;dir \/root\/opencode-proof \\  &#171;Reply with exactly BLADE_FIRECRACKER_OPENCODE_DEEPSEEK_OK&#187;\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c 0. \u0412 \u043b\u043e\u0433\u0435 opencode \u0431\u044b\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 llm.provider=deepseek \u0438 llm.model=deepseek-v4-flash. Secret file \u0438 auth.json \u0438\u0441\u0447\u0435\u0437\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430: credential material \u0436\u0438\u0432\u0435\u0442 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, provider log \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439, \u043a\u043b\u044e\u0447 \u043d\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432 guest image.\u041d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0437\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u043e\u043c opencode\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u044c \u043d\u0443\u0436\u043d\u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041e\u043d\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0430\u0433\u0435\u043d\u0442\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u043c. \u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0412\u041c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 capture \u043d\u0430 \u0445\u043e\u0441\u0442\u0435:tcpdump -n -i tap0 &#8216;host 192.168.1.2 or arp&#8217;\u041f\u0435\u0440\u0432\u044b\u0439 smoke test \u043f\u043e\u0439\u043c\u0430\u043b ARP \u0438 ICMP \u043c\u0435\u0436\u0434\u0443 192.168.1.2 \u0438 192.168.1.1, \u0447\u0442\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u043b\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0443\u0442\u044c \u0433\u043e\u0441\u0442\u044f. \u041f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a opencode \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043f\u0443\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438: DNS \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442 192.168.1.2 \u043a 8.8.8.8 \u0434\u043b\u044f api.deepseek.com, \u043e\u0442\u0432\u0435\u0442 CloudFront, \u0437\u0430\u0442\u0435\u043c TLS \u0441\u0435\u0441\u0441\u0438\u0438 \u043e\u0442 192.168.1.2 \u043a 3.173.21.63:443. \u0412 \u0442\u043e\u0439 \u0436\u0435 \u0442\u0440\u0430\u0441\u0441\u0435 \u0431\u044b\u043b \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u043a models.dev \u0438 registry.npmjs.org.\u0427\u0435\u0440\u0435\u0437 tcpdump \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c prompt \u0438\u043b\u0438 \u043e\u0442\u0432\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e HTTPS \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 payload. \u0417\u0430\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043e\u0431\u044a\u0435\u043c \u0431\u0430\u0439\u0442\u043e\u0432 \u0438 source address. \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b \u044d\u0442\u043e\u0433\u043e \u0447\u0430\u0441\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e: \u0432\u044b\u0437\u043e\u0432 \u0432\u044b\u0448\u0435\u043b \u0438\u0437 \u0412\u041c, \u043f\u0440\u043e\u0448\u0435\u043b \u0447\u0435\u0440\u0435\u0437 tap0 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 provider \u043c\u043e\u0434\u0435\u043b\u0438.\u0417\u0430\u043f\u0443\u0441\u043a \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0440\u0435\u0434\u0430\u0445\u041d\u0430 bare metal Linux Firecracker \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441 KVM. \u041d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043b\u0443\u0447\u0448\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043f\u043e SSH \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0442\u0430\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e KVM \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0445\u043e\u0441\u0442\u0435. \u0412 CI \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c vmlinux \u0438 ext4 rootfs, \u0430 \u0432 job \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e network setup, VM boot, opencode \u0438 packet capture. \u041d\u0430 macOS \u0438\u043b\u0438 Windows \u043d\u0443\u0436\u0435\u043d Linux VM \u0441 nested virtualization, \u043b\u0438\u0431\u043e Firecracker \u0441\u0442\u043e\u0438\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c \u0447\u0435\u0440\u0435\u0437 SSH.\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439: \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e \u044f\u0434\u0440\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0442 \u0434\u0438\u0441\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c agent request \u0438\u0437\u043d\u0443\u0442\u0440\u0438 \u0433\u043e\u0441\u0442\u044f \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 tap interface, \u043f\u043e\u043a\u0430 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c.\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 https:\/\/habr.com\/ru\/articles\/1038218\/<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-480669","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/480669","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=480669"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/480669\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=480669"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=480669"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=480669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}