打造透明代理的路由器或WiFi

打造透明代理的路由器或WiFi

对于接入网络的设备,只要使用DHCP自动获取相关地址配置或者使用指定网关就已经使用了代理网络,这样的效果我心动了,实践了。

注意:全篇文章的基础操作系统为Windows,Mac OS可以轻松实现路由功能而Windows却不行,才有这篇文章的尝试。

实现标题所说的效果,我目前实践了两种方案:

  1. 笔记本电脑的Wi-Fi实现透明代理,将使用WiFi的设备接入代理网络
  2. 路由器实现透明代理,将使用WiFi和Lan口的设备接入代理网络

实现这些效果所涉及到的操作系统/软件:

  • Hyper-V:Windows操作系统自带的虚拟机软件,使用其他的虚拟机软件也可以,主要这个是微软自己的东西有一些设置会很方便。

  • Openwrt:开源的路由器操作系统,可以自由的选择应用程序和配置,路由器设备使用这个还可以不受设备提供商的限制。

  • Clash:著名的开源跨平台代理工具,有支持多种代理协议、灵活的规则配置、丰富的社区和插件生态等特性 。

  • MyPublicWiFi:以可视化界面操作PC的WiFi设置并提供接入设备的上传/下载服务,还配有访问控制、日志记录和统计等功能。

先从简单的方案开始说起吧。

笔记本电脑WiFi实现透明代理

这个方案实现全程都在可视化界面进行操作的,简单易实现,所有通过笔记本WiFi接入的设备都接入了代理网络。

所需软件

根据具体情况安装相应的软件

配置Clash for Windows

默认你已经能使用Clash连接代理网络,所以不涉及具体的节点规则配置

image-20230413172401485

需要两步操作:

  1. 点击服务模式的管理,再弹出的窗口中进行安装

    image-20230413173346530

  2. 打开TUN模式的开关(打开TUN模式开关后,PC所有网络流量都指向了Clash,看具体需求加强规则配置)

此时在网络适配器里就出现了Clash虚拟的一个网卡

image-20230413173208821

配置MyPublicWiFi

在网络访问方面,支持使用ICS(网络连接共享)和NAT(路由模式),下面以路由模式做示例

image-20230413173704343

注意上面的网络适配器选的是Clash。

如果不使用MyPublicWiFi

手动配置网络连接共享,在 控制面板>网络和Internet>网络连接 里选择Clash这个适配器,右键选择属性,在共享选项卡下配置Internet连接共享,如图所示

image-20230413174210872

方案缺点

速度取决于笔记本WiFi的无线质量,比如无线速率、无线信号强度等,如果笔记本对这方面的硬件用料不足将严重影响上网体验。

路由器实现透明代理

下文开始,所有操作均是以我当时的情况为例子,请视具体情况做改变,而且默认你拥有一些基础知识/操作,例如Linux常用命令、操作Vi/Vim等。

这个方案实现略复杂,涉及到Linux操作和路由器配置,可将通过Lan口或路由器WiFi连接的设备接入代理网络。

所需软件

  • 虚拟机软件:我选择Hyper-V的原因是它是微软提供的Windows功能,能方便的设置随Windows启动而启动,当然其他的如VMWare、VirtualBox也有办法进行这些设置,只不过比起写脚本还不如点击一个按钮方便,对吧?
  • Openwrt:是的,将使用它来搭建一个路由器操作系统。
  • OpenClash:工作在Openwrt的Clash。

Hyper-V

下载安装

Win + Q 搜索 启用或关闭Windows功能 ,勾选:

  1. Hyper-V
  2. 虚拟机平台

微软相关文档参照:在 Windows 10 上启用 Hyper-V | Microsoft Learn

网络配置

在 Hyper-V 管理器的操作标签中点击虚拟交换机管理器进行网络配置,新建一个外部网络,如图所示

image-20230413191139873

注意在外部网络的选择卡中选择的是具有网络连接的网卡。

Openwrt

下载镜像

选择最新的稳定release版本后,下载系统对应的架构镜像,这里我下载的是x86_64

现在的Windows系统PC应该几乎都是x64,可以在命令行窗口中输入systeminfo来查看系统类型确认。

Openwrt官方release提供的img文件有:

  1. generic-ext4-combined-efi.img.gz: 使用 ext4 文件系统格式并包含 EFI 启动引导的镜像文件,通常用于在支持 EFI 启动的 x86_64 计算机上安装 OpenWrt。
  2. generic-ext4-combined.img.gz: 使用 ext4 文件系统格式的镜像文件,通常用于在不支持 EFI 启动的 x86_64 计算机上安装 Openwrt。
  3. generic-ext4-rootfs.img.gz: 只包含根文件系统的 ext4 格式的镜像文件,通常用于在已经有 bootloader 和内核的环境中安装 OpenWrt。
  4. generic-kernel.bin: 包含了 Openwrt 内核的二进制文件,通常用于在已经有 bootloader 的环境中引导 Openwrt。
  5. generic-squashfs-combined-efi.img.gz: 使用 squashfs 文件系统格式并包含 EFI 启动引导的镜像文件,通常用于在支持 EFI 启动的 x86_64 计算机上安装 OpenWrt。
  6. generic-squashfs-combined.img.gz: 使用 squashfs 文件系统格式的镜像文件,通常用于在不支持 EFI 启动的 x86_64 计算机上安装 Openwrt。
  7. generic-squashfs-rootfs.img.gz: 只包含根文件系统的 squashfs 格式的镜像文件,通常用于在已经有 bootloader 和内核的环境中安装 OpenWrt。
  8. rootfs.tar.gz: 压缩的根文件系统(rootfs)的 tar 包,通常用于在已经有 bootloader 和内核的环境中安装 Openwrt,并将文件系统解压到目标设备的根分区。

视具体情况来下载Image,这里我选择的是generic-ext4-combined-efi。

转换镜像格式

需要将img转换成Hyper-V支持的VHD或者VHDX格式,方式有很多:

  1. qemu-img
  2. VirtualBox 的 VBoxManage…要不还是用VirtualBox算了?哈哈哈
  3. StarWind V2V Converter

这里我选择的是 StarWind V2V Converter 还是可视化界面操作会舒服些,下面开始图片轰炸说明:

image-20230413195532061

image-20230413195633079

image-20230413195726227

image-20230413195938830

image-20230413200230116

image-20230413201003403

image-20230413201023230

image-20230413201052950

至此,转换完毕,同时会自动将刚刚的镜像导入至Hyper-V中。

配置Openwrt

Openwrt是Linux的一个发行版,Linux的命令也适用于Openwrt。

image-20230413202741584

先点击虚拟机标签页中的启动,然后再点击连接进入虚拟机界面。

image-20230413202955048

系统会输出很多信息,直到输出上图中的提示后,敲回车就行了。

设置IP地址、网关、DNS

输入命令vim /etc/config/network来编辑lan网口配置,如图

image-20230413210258982

具体配置内容要以当前网络环境为准,然后输入命令service network restart来重启网络。

设置防火墙

通过上一步的配置,现在就可以通过http://192.168.1.3访问Openwrt的LuCI了。

LuCI是Openwrt的Web管理面,它还提供了相关接口,所以也有各种各样的主题。

虽然有提示登录,但目前的root用户是无密码的,直接点登录就行。

在导航栏中点击 Network>Firewall 进入防火墙设置,开启lan->wan的Masquerading开关

image-20230413205749614

然后点击Save & Apply,此时网络就已经连通了,可以回到虚拟机界面使用命令ping baidu.com查看效果。

image-20230413210400167

安装OpenClash

到这里,我们得了解一下Openwrt的包管理器opkg,在Console输入opkg -help即可查看相关命令文档。

为了加快opkg下载速度,我设置了代理,输入以下命令来为当前Console设置代理:

1
2
export http_proxy=http://192.168.1.10:8964
export https_proxy=http://192.168.1.10:8964

然后开始更新opkg包管理,输入命令opkg update,下面开始安装它的前置依赖。

根据OpenClash的文档描述,我再优化一下变成三条命令:

1
2
3
opkg install coreutils-nohup bash curl ca-certificates ipset ip-full libcap libcap-bin ruby ruby-yaml kmod-tun unzip kmod-nft-tproxy luci-compat luci luci-base
opkg install iptables iptables-mod-tproxy iptables-mod-extra
opkg install dnsmasq-full

执行第一条命令,出了个error:resolve_conffiles: Existing conffile /etc/config/luci is different from the conffile in the new package. The new conffile will be placed at /etc/config/luci-opkg.,看这个意思的话,这个错误无关紧要。

执行第二条命令,无报错。

执行第三条命令,出了error

image-20230413214204205

看意思,已经有了这个依赖了,但如果不处理会在后续的安装中还是会出现这个错误,输入命令opkg remove dnsmasq来卸载冲突的依赖,再重新执行命令还是出了error,但和第一条的error一样,无关紧要。

前置依赖安装完毕,下面开始安装OpenClash。

输入命令cd /tmp切换到tmp目录,下载OpenClash最新的Release包上传到tmp目录然后再该目录下输入命令opkg install luci-app-openclash*安装OpenClash。

安装结束,回到LuCI界面,在导航栏Services下就可以看到OpenClash了,至此安装结束,接下来的配置和CFW是类似的。

image-20230413222129681

可有可无的配置
  1. 设置LuCI界面为中文

    命令opkg install luci-i18n-base-zh-cn可以安装LuCI的中文语言包,然后在界面的System>Language and Style上选择切换。

  2. 设置LuCI的主题

    Github上有一些主题项目是以luci-theme开头的,搜索相关的主题并根据文档进行安装即可。

配置路由器

在上一步完成后,其实就已经可以使用指定网关的方式来实现路由器连接的设备接入代理网络了。

这里配置路由器是配置路由器的DHCP,将DHCP中的网关配置成Openwrt的IP地址来省掉我们手动配置网关,并且还可以借助路由器的WiFi来提供比笔记本要强得多的无线速率(如果你的路由器价钱到位的话)

image-20230414022150364

至此,所需配置都已完成,所有接入路由器的设备可以通过手动指定网关或者使用DHCP自动获取网络配置来接入代理网络。

方案缺点

电费,因为相当于把PC当路由器了,得不停机的提供服务,所以相对于台式的话,笔记本功耗还好一些,当然得切掉其他不必要的设备,比如显示器。

PS

如果我要是有Mac,它只会沦落为服务器,被我无情的放置并且24小时不停机的提供服务,才不会拿它来写代码呢。


打造透明代理的路由器或WiFi
https://blog.gugu.dev/2024-02-21/打造透明代理的路由器或WiFi/
作者
MinMin
发布于
2024年2月21日
许可协议