作者:Chancel Yang, 创建:2023-01-10, 字数:14420, 已阅:139, 最后更新:2023-01-10
Windows10 以上的 Hyper-V 很便捷,作为虚拟 Openwrt 来说也是完全够用的
软路由是指利用台式机或服务器配合软件形成路由解决方案,主要靠软件的设置,达成路由器的功能
主路由则是以特有的硬设备,包括处理器、电源供应、嵌入式软件,提供设定的路由器功能
国内的软路由最大的作用还是使用一些特殊功能,如NAT穿越、魔法爱国、域名的DNS劫持、QOS动态策略调整等等
软路由的功能也可以通过在特定的路由器上刷第三方 ROM 来实现,但硬路由的性能通常很差
软路由的优势:
优势其实很多很多,因为软路由本质上就是一台定制化路由功能的Linux主机
现在的软路由系统大部分指基于 Openwrt项目 衍生的各种编译版本
说到软路由,以前初接触的时候觉得应该双网口路由是最稳定的,根据一段时间的使用,发现单网口路由稳定性也是很高的,作为家用其实完全没问题
双网口路由跟单网口路由没有本质上的区别,在家庭之间应用几乎感觉不到任何差距,单网口组建单臂路由与双网口路由在体验上高度一致,但单臂路由的带宽要减一半,联合实际已经适合大部分人使用
那么虚拟机呢?如果你实在不想增加设备,毕竟根据奥卡姆剃刀原理实在不愿意新增设备,那么创建一个内网虚拟机,使用桥接网卡的方式虚拟一个网卡出来,再安装软路由系统是完全没有问题的
这种虚拟机与单臂路由的原理一致,体验上几乎也毫无差别,当然性能取决于你虚拟机所配置的性能
按照恩山论坛的看法,大家最后都会走上自主编译软路由的路,一开始使用软路由,如果Linux基础扎实且你确认你需要软路由系统,建议直接编译后使用
如果不确定软路由是否适合你的需求,那么下载一个已经编译完成的系统初步体验使用之后再确定是否需要自行编译
我会在文末附上为我已经编译好的Openwrt系统固件与Hype-v的磁盘文件(20M+),后者只需要直接创建虚拟机并导入开机,开箱即用
自行编译的优点
如果对安全有极高要求,建议直接编译原版的Openwrt,再根据需要自行添加插件
本篇采用的比较简捷的方法,编译恩山Lean大的固件,大部分人使用他的编译版本,安全性上有所保障(当然也不是绝对安全的)
Lean大的版本带上了绝大部分的最新版本的IPK插件(Openwrt系统包格式为IPK)
根据Lean大的Git仓库说明进行编译安装基本没有任何问题,这里可以简单说明一下步骤以及遇到的一些问题
编译时需要一个完全畅通的网络(接下来有说明)
首先编译需要Ubuntu14.04系统,实测16.04和18.04也是没有任何问题的,不过出于方便考虑,虚拟一个Ubuntu也就十分钟的事情
下载Ubuntu14.04:Ubuntu14.04官网下载
下载完成以后根据你的虚拟机自行创建Ubuntu14.04的虚拟机,各种虚拟软件都可以,这里不展开说,注意编译X86镜像磁盘不能低于24G
创建完成后,建议开始使用合理网络环境,更换APT的源为国内也可以,但编译也是需要合理的网络环境,在当前终端使用代理的方式如下
# 假如是HTTP代理
export ALL_PROXY=http://192.168.1.1:3128
# 假如是SOCKS代理
export ALL_PROXY=socks5://192.168.1.1:1080
调整完成网络之后更新系统以及安装依赖插件
# 更新系统
sudo apt update
# 安装依赖
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3.5 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib linux-libc-dev:i386
克隆Lean大的项目
git clone https://github.com/coolsnowwolf/lede
进入项目目录后初始化项目
# 进入目录
cd lede
# 初始化项目
./scripts/feeds update -a
./scripts/feeds install -a
完成上述两步之后,敲入下面指令
make menuconfig
会出现如下列表
这里基本就是配置Openwrt编译内容的地方了,这个菜单有任何不懂的地方可以自行Google查询,大部分参数都是默认最好的,也就是其实什么都不做直接编译也是一个很不错的版本了
大部分人需要的功能可以重点关注一下2项
其他插件可以参考OpenWrt 编译 LuCI -> Applications 添加插件应用说明-L大【2020.2.28】--XTWZ的帖子
这里简单插件说明表,感谢XTWZ的辛苦整理,这里隐去部分敏感软件,建议直接查看原文
--------------------------------------------------------------------------------------LuCI ---> Applications ---> luci-app-accesscontrol #访问时间控制
LuCI ---> Applications ---> luci-app-acme #ACME自动化证书管理环境
LuCI ---> Applications ---> luci-app-adblock #ADB广告过滤
LuCI ---> Applications ---> luci-app-adbyby-plus #广告屏蔽大师Plus +
LuCI ---> Applications ---> luci-app-adbyby #广告过滤大师(已弃)
LuCI ---> Applications ---> luci-app-adkill #广告过滤(已弃)
LuCI ---> Applications ---> luci-app-advanced-reboot #Linksys高级重启
LuCI ---> Applications ---> luci-app-ahcp #支持AHCPd
LuCI ---> Applications ---> luci-app-aliddns #阿里DDNS客户端(已弃,集成至ddns)
LuCI ---> Applications ---> luci-app-amule #aMule下载工具
LuCI ---> Applications ---> luci-app-aria2 # Aria2下载工具
LuCI ---> Applications ---> luci-app-arpbind #IP/MAC绑定
LuCI ---> Applications ---> luci-app-asterisk #支持Asterisk电话服务器
LuCI ---> Applications ---> luci-app-attendedsysupgrade #固件更新升级相关
LuCI ---> Applications ---> luci-app-autoreboot #支持计划重启
LuCI ---> Applications ---> luci-app-baidupcs-web #百度网盘管理 *
LuCI ---> Applications ---> luci-app-bcp38 #BCP38网络入口过滤(不确定)
LuCI ---> Applications ---> luci-app-bird1-ipv4 #对Bird1-ipv4的支持
LuCI ---> Applications ---> luci-app-bird1-ipv6 #对Bird1-ipv6的支持
LuCI ---> Applications ---> luci-app-bird4 #Bird 4(未知)(已弃)
LuCI ---> Applications ---> luci-app-bird6 #Bird 6(未知)(已弃)
LuCI ---> Applications ---> luci-app-bmx6 #BMX6路由协议
LuCI ---> Applications ---> luci-app-bmx7 #BMX7路由协议
LuCI ---> Applications ---> luci-app-caldav #联系人(已弃)
LuCI ---> Applications ---> luci-app-cifsd #网络共享CIFS/SMB服务器 *
LuCI ---> Applications ---> luci-app-cjdns #加密IPV6网络相关
LuCI ---> Applications ---> luci-app-clamav #ClamAV杀毒软件
LuCI ---> Applications ---> luci-app-commands #Shell命令模块
LuCI ---> Applications ---> luci-app-cshark #CloudShark捕获工具
LuCI ---> Applications ---> luci-app-ddns #动态域名 DNS(集成阿里DDNS客户端)
LuCI ---> Applications ---> luci-app-diag-core #core诊断工具
LuCI ---> Applications ---> luci-app-dnscrypt-proxy #DNSCrypt解决DNS污染
LuCI ---> Applications ---> luci-app-dnsforwarder #DNSForwarder防DNS污染
LuCI ---> Applications ---> luci-app-dnspod #DNSPod动态域名解析(已弃)
LuCI ---> Applications ---> luci-app-dockerman #Docker容器 *
LuCI ---> Applications ---> luci-app-dump1090 #民航无线频率(不确定)
LuCI ---> Applications ---> luci-app-dynapoint #DynaPoint(未知)
LuCI ---> Applications ---> luci-app-e2guardian #Web内容过滤器
LuCI ---> Applications ---> luci-app-familycloud #家庭云盘
LuCI ---> Applications ---> luci-app-filetransfer #文件传输(可web安装ipk包)
LuCI ---> Applications ---> luci-app-firewall #添加防火墙
LuCI ---> Applications ---> luci-app-flowoffload #Turbo ACC网络加速(集成FLOW,BBR,NAT,DNS...
LuCI ---> Applications ---> luci-app-freifunk-diagnostics #freifunk组件 诊断(未知)
LuCI ---> Applications ---> luci-app-freifunk-policyrouting #freifunk组件 策略路由(未知)
LuCI ---> Applications ---> luci-app-freifunk-widgets #freifunk组件 索引(未知)
LuCI ---> Applications ---> luci-app-frpc #内网穿透 Frp
LuCI ---> Applications ---> luci-app-fwknopd #Firewall Knock Operator服务器
LuCI ---> Applications ---> luci-app-guest-wifi #WiFi访客网络
LuCI ---> Applications ---> luci-app-gfwlist #GFW域名列表(已弃)
LuCI ---> Applications ---> luci-app-haproxy-tcp #HAProxy负载均衡-TCP
LuCI ---> Applications ---> luci-app-hd-idle #硬盘休眠
LuCI ---> Applications ---> luci-app-hnet #Homenet Status家庭网络控制协议
LuCI ---> Applications ---> luci-app-ipsec-virtual**d #virtual**服务器 IPSec
LuCI ---> Applications ---> luci-app-kodexplorer #KOD可道云私人网盘
LuCI ---> Applications ---> luci-app-kooldns #virtual**服务器 ddns替代方案(已弃)
LuCI ---> Applications ---> luci-app-koolproxy #KP去广告(已弃)
LuCI ---> Applications ---> luci-app-lxc #LXC容器管理
LuCI ---> Applications ---> luci-app-meshwizard #网络设置向导
LuCI ---> Applications ---> luci-app-minidlna #完全兼容DLNA / UPnP-AV客户端的服务器软件
LuCI ---> Applications ---> luci-app-mjpg-streamer #兼容Linux-UVC的摄像头程序
LuCI ---> Applications ---> luci-app-mtwifi #MTWiFi驱动的支持 *
LuCI ---> Applications ---> luci-app-mmc-over-gpio #添加SD卡操作界面(已弃)
LuCI ---> Applications ---> luci-app-multiwan #多拨虚拟网卡(已弃,移至syncdial)
LuCI ---> Applications ---> luci-app-mwan #MWAN负载均衡(已弃)
LuCI ---> Applications ---> luci-app-mwan3 #MWAN3负载均衡
LuCI ---> Applications ---> luci-app-mwan3helper #MWAN3分流助手
LuCI ---> Applications ---> luci-app-n2n_v2 #N2N内网穿透 N2N v2 virtual**服务
LuCI ---> Applications ---> luci-app-netdata #Netdata实时监控(图表) *
LuCI ---> Applications ---> luci-app-nft-qos #QOS流控 Nftables版
LuCI ---> Applications ---> luci-app-ngrokc #Ngrok 内网穿透(已弃)
LuCI ---> Applications ---> luci-app-nlbwmon #网络带宽监视器
LuCI ---> Applications ---> luci-app-noddos #NodDOS Clients 阻止DDoS攻击
LuCI ---> Applications ---> luci-app-nps #内网穿透nps *
LuCI ---> Applications ---> luci-app-ntpc #NTP时间同步服务器
LuCI ---> Applications ---> luci-app-ocserv #OpenConnect virtual**服务
LuCI ---> Applications ---> luci-app-olsr #OLSR配置和状态模块
LuCI ---> Applications ---> luci-app-olsr-services #OLSR服务器
LuCI ---> Applications ---> luci-app-olsr-viz #OLSR可视化
LuCI ---> Applications ---> luci-app-openvirtual** #Openvirtual**客户端
LuCI ---> Applications ---> luci-app-openvirtual**-server #易于使用的Openvirtual**服务器 Web-UI
LuCI ---> Applications ---> luci-app-oscam #OSCAM服务器(已弃)
LuCI ---> Applications ---> luci-app-p910nd #打印服务器模块
LuCI ---> Applications ---> luci-app-pagekitec #Pagekite内网穿透客户端
LuCI ---> Applications ---> luci-app-polipo #Polipo代理(是一个小型且快速的网页缓存代理)
LuCI ---> Applications ---> luci-app-pppoe-relay #PPPoE NAT穿透 点对点协议(PPP)
LuCI ---> Applications ---> luci-app-p p t p-server #virtual**服务器 p p t p
LuCI ---> Applications ---> luci-app-privoxy #Privoxy网络代理(带过滤无缓存)
LuCI ---> Applications ---> luci-app-qbittorrent #BT下载工具(qBittorrent)
LuCI ---> Applications ---> luci-app-qos #流量服务质量(QoS)流控
LuCI ---> Applications ---> luci-app-radicale #CalDAV/CardDAV同步工具
LuCI ---> Applications ---> luci-app-ramfree #释放内存
LuCI ---> Applications ---> luci-app-rp-pppoe-server #Roaring Penguin PPPoE Server 服务器
LuCI ---> Applications ---> luci-app-samba #网络共享(Samba)
LuCI ---> Applications ---> luci-app-samba4 #网络共享(Samba4)
LuCI ---> Applications ---> luci-app-sfe #Turbo ACC网络加速(flowoffload二选一)
LuCI ---> Applications ---> luci-app-s-s #SS兲朝上网(已弃)
LuCI ---> Applications ---> luci-app-s-s-libes #SS-libev服务端
LuCI ---> Applications ---> luci-app-shairplay #支持AirPlay功能
LuCI ---> Applications ---> luci-app-siitwizard #SIIT配置向导 SIIT-Wizzard
LuCI ---> Applications ---> luci-app-simple-adblock #简单的广告拦截
LuCI ---> Applications ---> luci-app-smartdns #SmartDNS本地服务器(已弃)
LuCI ---> Applications ---> luci-app-softethervirtual** #SoftEther virtual**服务器 NAT穿透 *
LuCI ---> Applications ---> luci-app-splash #Client-Splash是无线MESH网络的一个热点认证系统
LuCI ---> Applications ---> luci-app-sqm #流量智能队列管理(QOS)
----------------------------------------------------------------------------------------LuCI ---> Applications ---> luci-app-statistics #流量监控工具
LuCI ---> Applications ---> luci-app-syncdial #多拨虚拟网卡(原macvlan)
LuCI ---> Applications ---> luci-app-tinyproxy #Tinyproxy是 HTTP(S)代理服务器
LuCI ---> Applications ---> luci-app-transmission #BT下载工具
LuCI ---> Applications ---> luci-app-travelmate #旅行路由器
LuCI ---> Applications ---> luci-app-ttyd #网页终端命令行
LuCI ---> Applications ---> luci-app-udpxy #udpxy做组播服务器
LuCI ---> Applications ---> luci-app-uhttpd #uHTTPd Web服务器
LuCI ---> Applications ---> luci-app-unblockmusic #解锁网易云灰色歌曲
LuCI ---> Applications ---> luci-app-unblockneteasemusic-go #解锁网易云歌曲 *
LuCI ---> Applications ---> luci-app-unblockneteasemusic-mini #解除网易云音乐 *
LuCI ---> Applications ---> luci-app-unbound #Unbound DNS解析器
LuCI ---> Applications ---> luci-app-upnp #通用即插即用UPnP(端口自动转发)
LuCI ---> Applications ---> luci-app-usb-printer #USB 打印服务器
LuCI ---> Applications ---> luci-app-verysync #微力同步 *
LuCI ---> Applications ---> luci-app-vlmcsd #KMS服务器设置
LuCI ---> Applications ---> luci-app-vnstat #vnStat网络监控(图表)
LuCI ---> Applications ---> luci-app-virtual**bypass #virtual** BypassWebUI 绕过virtual**设置
LuCI ---> Applications ---> luci-app-vsftpd #FTP服务器
LuCI ---> Applications ---> luci-app-watchcat #断网检测功能与定时重启
LuCI ---> Applications ---> luci-app-webadmin #Web管理页面设置
LuCI ---> Applications ---> luci-app-webshell #网页命令行终端(已弃)
LuCI ---> Applications ---> luci-app-wifischedule #WiFi 计划
LuCI ---> Applications ---> luci-app-wireguard #virtual**服务器 WireGuard状态
LuCI ---> Applications ---> luci-app-wol #WOL网络唤醒
LuCI ---> Applications ---> luci-app-wrtbwmon #实时流量监测
LuCI ---> Applications ---> luci-app-xlnetacc #迅雷快鸟
LuCI ---> Applications ---> luci-app-zerotier #ZeroTier内网穿透
注意,编译之前请注意你的网络环境要保持畅通!
在目录下输入
# 单线程
make -j1 V=s
初次编译时间可能需要数小时,请耐心等待,效果如下
编译完成之后,在lede的目录下,找到bin/targets/x86/64里的img文件,这个就是你编译完成之后的镜像文件老
IMG镜像可以通过Ghost安装/Linux DD安装/RAW刻录硬盘方式安装,总之思路是只要能把IMG文件写入磁盘就可以启动,所以安装方法非常灵活
我的Hyper-v里刚好有Windows7的虚拟机,如果你没有,你也可以按照上面的思路,在任意虚拟机下添加虚拟磁盘并将IMG写入该虚拟磁盘即可
我这里选择为Windows7虚拟机添加一个 1G大小的虚拟磁盘,配置好虚拟磁盘路径,在Windows7里完成初始化,如下图
然后在虚拟的Windows7里下载安装 physdiskwrite程序,网上资源非常多,请自行下载,下载之后会得到一个physdiskwrite.exe文件,将IMG镜像放置同一目录下
以管理员权限启动CMD并定位到physdiskwrite.exe所在目录,执行如下指令
physkiskwrite -u 你的openwrt镜像文件.img
会出现磁盘列表提供选择,按序号选择刚刚添加那个1G的虚拟磁盘,写入完成之后关闭虚拟机
回到添加虚拟磁盘的界面,复制这个虚拟磁盘的路径,取出该文件并删除该虚拟磁盘,你会发现这个1G的磁盘文件仅24M大小!
这样一个带Openwrt的磁盘就制作成功了,后续只需创建虚拟机,将磁盘设置为虚拟机磁盘,Openwrt系统开箱即用!
如果你嫌麻烦,可以@我分享这个虚拟磁盘文件省去上述这些步骤
根据上面制作出来的虚拟磁盘,我们这里创建一个Hyper-v的虚拟机,并在磁盘那一步选择已存在的虚拟磁盘文件,如下图
配置好内存/CPU核心数/网络,下面是配置建议
到这里大功告成,启动你的Openwrt虚拟机吧!
启动Openwrt之后回车,输入 'ip -a' 查看网卡情况,根据具体情况设置静态IP
# 设置静态IP
vim /etc/config/network
config interface 'loopback'
option ifname 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config globals 'globals'
option ula_prefix 'fd37:ecdb:7e06::/48'
# 下面设置好你的静态地址,注意网关指向主路由即可
config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option gateway '192.168.10.1'
option ipaddr '192.168.10.2'
option netmask '255.255.255.0'
option ip6assign '60'
option dns '8.8.8.8 223.5.5.5'
# 配置完成后重启Openwrt
reboot
输入你为Openwrt配置的静态IP,可以看到Openwrt的欢迎页,默认密码为 password
如果我们使用双网口的真实物理软路由设备,那么只需要将软路由套在原本主路由WAN口的两端,让所有数据在离开你的网络之前统一经过Openwrt的处理
但单网口的机器不行,虚拟机可以新增两个网卡来办到,但这并不是最优解,最优解显然是旁路由
对于“胖路由”,网上搜索到的资料里没有找到一个很清晰的定义
旁路由个人理解使用上来看是一个能一定意义上辅助主路由的设备,分担一些主路由的功能或者做到一些主路由没有的功能
比如很多百元路由配置低下但胜在稳定且众多网口速率均是千兆,而我们需要的DNS劫持/QOS管理功能,便可以利用软路由来做到这些功能
要想设置旁路由,还得先了解网关,Wiki上如此说明Gateway
在传统TCP/IP术语中,网络设备只分成两种,一种为网关(gateway),另一种为主机(host)。网关能在网络间转递数据包,但主机不能转送数据包。在主机(又称终端系统,end system)中,数据包需经过TCP/IP四层协议处理,但是在网关(又称中介系统,intermediate system)只需要到达网际层(Internet layer),决定路径之后就可以转送。在当时,网关(gateway)与路由器(router)还没有区别。
那么可以简单理解为网关是标记数据去哪里,大部分情况下的默认网关都是指向主路由,可以不是吗?当然可以,将网关指向Openwrt虚拟机,那么数据在出发的时候便经过了Openwrt,这与真正的路由并无区别
到这里设置旁路由到教程就呼之欲出了,我们只需要将网关指向旁路由,那么数据在发出去的时候便会经过旁路由,如果这个旁路由的设备恰好就是Openwrt,那么就可以辅助我们做到那些复杂的功能了,主路由仅接收网络,旁路由负责网关、DHCP服务器、DNS服务器是最好的兼容方案
旁路由这一部分的设置是通用的,Openwrt是虚拟机还是真实接入的设备并不影响到这一部分到设置,根据上面讲述的原理,设置旁路由的4个步骤应如下
点击保存并应用之后重启主路由,重启完成之后就可以看到所有连接到旁路由到网段客户端设备都被分配到网关地址为Openwrt的地址,这个时候Openwrt上的所有插件都可以正常工作了
到这里Openwrt做旁路由便设置完毕了,畅享你的网络吧~