基于Debian,一分钟安装一个可以网卡直通的OpenWRT虚拟机

OpenWrt是很受欢迎的路由器固件,可被轻易地定制和扩展。这里跟大家介绍一个快速安装OpenWrt虚拟机并且实现网卡直通的方法。

说起安装虚拟机,除了VMware Workstation、VirtualBox等软件,还有虚拟化平台。说起使用虚拟化平台,很多人会说用VMware的ESXi,也有人说用基于Debian的Proxmox Virtual Environment (PVE)。不管别人用什么,现在我们介绍直接用Debian 12实现一分钟安装OpenWRT镜像并且实现网卡直通。

用到的工具:

  1. 宿主机:一台安装了Debain 12且已经安装qemu的有4个网口的工控机。
  2. OpenWrt官方镜像:openwrt-23.05.2-generic-ext4-combined.img.gz

一分钟装完并实现网卡直通

问大家一个问题:把大象装进冰箱,要分几步?

答案是:三步,第一步把冰箱门打开;第二步把大象放进去,第三步,把冰箱门关上。

安装OpenWRT虚拟机且让它能够进行网卡直通,需要几步,也是三步,第一步准备可用的虚拟机的磁盘;第二步把网卡解绑并绑定为vfio设备;第三步创建一个OpenWRT的虚拟机并实现网卡直通。

  1. 创建给虚拟机用的磁盘:OpenWrt作为为路由器开发的系统,直接提供了一个.img,且不能引导,很多人会将其转换为iso,然后制作成引导盘。这种转换在给物理机安装OpenWrt时是必须的,但是我们现在是在安装虚拟机,所以直接用qemu-img进行转换
qemu-img convert -p -f raw -O qcow2 ./openwrt-23.05.2-x86-64-generic-ext4-combined.img openwrt-23.05.2-generic-ext4-conbined.qcow2 #转换产生一个qcow2以供qemu使用
qemu-img resize -f raw openwrt-*.img 20G #扩容到20 G。
  1. 卸载网卡并以vfio的方式驱动:Linux系统中,使用PCI/PCI-e总线连接到电脑上的设备都有一个id,可以用来识别某个设备
lspci | grep "Ethernet" #lspci列出使用PCI/PCI-e总线的设备,grep "Ethernet"用于匹配网卡

第一列就是设备的id。

按照第一列给出的内容,找到你想要直通给OpenWrt的设备。我在这里用eth1和eth2,解绑并且允许作为vfio设备使用。

sudo modprobe vfio
sudo modprobe vfio-pci
echo "0000:02:00.0" | sudo tee /sys/bus/pci/devices/0000:02:00.0/driver/unbind
echo "0000:03:00.0" | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver/unbind
echo "vfio-pci" | sudo tee /sys/bus/pci/devices/0000:02:00.0/driver_override
echo "vfio-pci" | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver_override
echo "0000:02:00.0" | sudo tee /sys/bus/pci/drivers/vfio-pci/bind
echo "0000:03:00.0" | sudo tee /sys/bus/pci/drivers/vfio-pci/bind

前两行加载vfio相关的模块,3、4行解绑、5、6行说明这两网卡跟vfio跑了,7、8行把网卡绑定到vfio。
3. 启动一个直通这两个网卡的虚拟机

qemu-system-x86_64 -enable-kvm -machine q35 -cpu host -smp 2 -m 2048 -drive file=/path-to/openwrt-23.05.2-generic-ext4-conbined.qcow2,if=virtio  -device vfio-pci,host=0000:02:00.0 -device vfio-pci,host=0000:03:00.0 -nographic -net none
#/path-to/改为openwrt-23.05.2-generic-ext4-conbined.qcow2所在路径
#2核,2 GiB内存。

虚拟机,启动!

进去看看哪个网卡被设置成了wan,哪个网卡被设置成了lan。wan对应的网卡接上游的设备,lan口接下游的设备,剩下的自己配置吧。

写在最后

一分钟安装只是开个玩笑,后续补几张图说明一下。

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Docker 内网穿透配置教程 (基于 Debian) 1. 安装 Docker:在 Debian 系统中安装 Docker 的方法请参考官方文档。 2. 安装 Nginx:在终端中输入以下命令安装 Nginx: ``` sudo apt-get update sudo apt-get install nginx ``` 3. 创建 Docker 容器:使用以下命令创建一个运行在端口 8080 上的 Docker 容器: ``` sudo docker run -p 8080:80 -d nginx ``` 4. 配置 Nginx:编辑 Nginx 配置文件(/etc/nginx/sites-available/default),添加以下内容: ``` server { listen 80; server_name 你的域名; location / { proxy_pass http://你的内网 IP:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 5. 重启 Nginx:使用以下命令重启 Nginx: ``` sudo service nginx restart ``` 6. 配置防火墙:如果你的机器上安装了防火墙,请在防火墙中添加规则,允许对外访问端口 80。 7. 配置完成:这样你就可以通过域名访问你的内网机器了。 ### 回答2: 基于Debian的Docker内网穿透配置教程如下: 1. 准备工作: - 安装Docker:使用apt-get命令安装Docker。 - 安装Docker Compose:使用pip命令安装Docker Compose。 2. 创建Dockerfile: - 在本地创建一个目录,用于存放配置文件和Dockerfile。 - 在该目录下创建一个Dockerfile,并添加以下内容: ``` FROM debian:latest ENV LC_ALL C.UTF-8 RUN apt-get update && apt-get install -y socat COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] ``` 3. 创建entrypoint.sh脚本: - 在同一目录下创建一个entrypoint.sh文件,并添加以下内容: ``` #!/bin/bash socat tcp-listen:<本地端口号>,fork tcp:<目标IP地址>:<目标端口号> ``` 4. 构建Docker镜像: - 执行以下命令来构建Docker镜像: ``` docker build -t tunnel . ``` 5. 启动Docker容器: - 执行以下命令来启动Docker容器,并将本地端口映射到容器内部的端口: ``` docker run -d -p <本地端口号>:<容器内部端口号> tunnel ``` 6. 进行内网穿透测试: - 在本地访问`localhost:<本地端口号>`,将会使用内网穿透将请求转发到目标IP地址的目标端口号。 通过上述步骤,你可以配置基于Debian的Docker内网穿透。请确保替换相关的占位符,如本地端口号、目标IP地址和端口号,以满足你的实际需求。 ### 回答3: 基于Debian的Docker内网穿透配置教程如下: 1. 首先,确保你的Debian系统已经安装了Docker。可以通过运行以下命令进行检查: ``` docker --version ``` 2. 安装并配置代理服务器。我们使用Nginx作为代理服务器。运行以下命令进行安装: ``` sudo apt-get update sudo apt-get install nginx ``` 3. 修改Nginx的配置文件。打开Nginx的默认配置文件: ``` sudo nano /etc/nginx/sites-available/default ``` 4. 在配置文件的server节中添加以下内容,用于指定端口转发: ``` location / { proxy_pass http://localhost:8000; // 将8000端口替换成你实际使用的端口 } ``` 5. 保存配置文件并重启Nginx服务: ``` sudo service nginx restart ``` 6. 运行你的Docker容器,并暴露你想要的端口。假设你要将容器的80端口映射到主机的8000端口,你可以使用以下命令运行容器: ``` docker run -p 8000:80 <image> ``` 其中,`<image>`是你要运行的Docker镜像。 7. 现在,你的Docker容器的端口已经映射到了主机的8000端口。由于配置了Nginx代理服务器,因此你可以使用主机的IP地址和8000端口来访问Docker容器。 总结: 通过以上步骤,你可以在Debian系统上配置Docker内网穿透。通过Nginx代理服务器,你可以将Docker容器的端口映射到主机的指定端口,从而可以通过主机的IP地址和指定端口来访问Docker容器。这样,你就可以在内网环境中方便地访问Docker容器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值