找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 4174|回复: 54

x86软路由折腾记

[复制链接]
一、选机型和刷机

        用了几年的天价K3,已经越来越不稳定了。表现就是经常5G无线信号会无故消失,断电重启后才重新出现。由于我的K3在家里是做主路由用的,所有的程序功能都跑在它上面,还兼做无线发射,所以总担心压力太大会让它提前崩溃。再加上家里的宽带网在电信的鼓动之下,从200M提速到500M,所以就想弄个x86的软路由来做主路由,把K3退下来只做无线AP用,这样就算哪天K3真的牺牲了,对家里的网络也不会有太大的影响。
       既然要换,就要先选机型。考虑到以后要放到弱电箱里去的,所以体积不能太大。其次,不需要太多网口。对我来说,一进一出就行了。最后综合考虑了价格和电耗,在PDD上选了一款N3160的小机器。拿到手确实很小巧,做工也还行吧。没有选最新的N5XXX系列,主要是价格的原因,每个月的零花钱太少了,总得省点。内存2G,16G的SSD,做主路由应该是够了。
       首先是刷机。商家寄来的时候默认刷的是爱快。因为对它不熟悉,而且听说不能science什么的,拿到手就格掉了,刷了官网下载的最新的openwrt22.03。在刷openwrt的过程中,踩坑无数,说起来都是泪啊。刷机的过程对我们经常给电脑装系统的人来说倒很简单:连上键盘、鼠标和显示器,U盘做个启动盘,网上下载了img写盘工具,和官网下载的openwrt22.03包一起放到U盘里,U盘启动后,用它写入软路由的SSd,重启就好了。问题出在openwrt的版本上。最新的openwrt采用了nft的firewall4做防火墙,和science类插件存在软件兼容性的问题。先是安装,在网上找资料,用了很多办法,总算装上一、两个了,又因为nft的原因无法运行。总算找到原因了,是firewall版本的原因,咬咬牙,退回openwrt21.02吧。结果退回21.02后,由于基础包版本低,这类软件在安装的时候找不到高版本的依赖,或者缺失核心的kmod模块,直接不让安装。我哭!
        既然science软件装不了,先装其他软件吧。也还是版本原因,aria2安装后不能启动。根据说明调整了参数,修改了目录也不行。另外,原来在K3上用过的amule干脆就找不到了。找遍全网也没有x86下的软件包。后来在网上找同类软件,发现有个mldonkey比较牛,可以代替aria2和amule,问题是也找不到它的安装包。咬咬牙,自己动手,学编译吧。没有软件包,我自己编译来用,还不行吗?


我的恩山、我的无线 The best wifi forum is right here.
电信:怪我咯
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

直接用爱快,就没这么多麻烦了

点评

说是爱快不让装那几个science插件啊  发表于 2023-4-7 17:56
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

本帖最后由 ailin333 于 2023-4-7 17:44 编辑

这种小主机,没有内置专门的交换机芯片吧?全靠CPU转发,网络稍微复杂点、网速过千就靠不住啊!!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

看着都累
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

自己编译固件啊,装插件遇到内核不匹配很常见,只有直接编译进去

点评

最后还是自己编译解决问题  发表于 2023-4-7 17:57
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

自己编译当然好,可要踩的坑太多 ,不如用他的精简固件,然后自己想要的app直接安装 ,没有兼容性的问题https://downloads.immortalwrt.org/

点评

是的,编译起来确实麻烦。遇坑无数  发表于 2023-4-7 17:57
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
我看了价格,n3160貌似也贵。我选择加点钱买n4100,或者4125

点评

N4125的热功耗略高点,是10W,N3160是6W。当时主要是考虑的这点  发表于 2023-4-7 18:34
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 wubozh 于 2023-4-7 21:40 编辑

二、编译mldonkey
       先去网上查资料,学习编译的流程。在电脑上用vmware安装了最新版的ubuntu,然后下载了openwrt的SDK包和mldonkey的源码包,在ubuntu里进行编译。结果,无论怎么编译,都不成功,提示有个ocaml版本不对,下载ocaml4.01不成功。手工在ubuntu里下载,发现版本高出很多。没办法,想通过修改ubuntu的软件源指向ubuntu的低版本源来下载安装ocaml4.01,安装不通过。后来通过用虚拟机安装低版本的ubuntu测试,期间安装过18、16,14版,发现14.04版本提供的软件源里的ocaml版本是4.01。好吧,一番折腾下来,电脑里有了22、18、16、14的ubuntu镜像了,看着很有成就感,其实满是无奈啊。
      装好ubuntu14.04了,同样传进openwrt的SDK包和mldonkey的源码,试编译,成功了。但是,但是,现在编译出来的是linux下用的mldonkey啊,运行起来没错,在ubuntu下用浏览器连接后台运行的mldonkey也成功,但交叉编译就不行。不管怎么指定交叉编译的平台,指定编译参数,最终都能编译成功,但编译出来的还是linux下的mldonkey,在ubuntu下运行正常,传进openwrt运行就出错。其间各种查资料,都没解决问题。它还是能编译成功,但编译出来的仍然是linux下的版本。
      好了,我怕你了,不用了,行不?放到一边去吧。
     接着因为有些软件在openwrt下安装成功后无法正常运行(比如aria2和某science插件),就想编译一个带软件包的openwrt。经过试验,发现在ubuntu14和16下都不能正确编译21.02和22.03版的openwrt,在18.04版下编译成功。编译成功了openwrt后,想着在完整openwrt编译环境下再编译mldonkey试试,结果没想到,不需要指定平台参数,直接make就编译出来了。在ubuntu下运行,失败(总算是失败了,以前可是每次编译出来在ubuntu下运行都是正常的,NND),心中一喜,传进openwrt运行,成功!
      总算编译出了一个能在openwrt-x86下正常运行的的mldonkey了。但它不带luci界面,只能后台运行。于是,查资料,设参数,总算把mldonkey调试好用了。连编译带设置到好用前后花了差不多三个多星期的时间。经过测试,在我有公网IP的环境下,做好映射,它的下载确实速度很快。BT和ed2k也都支持。下载链接见我前面一个帖子:
https://www.right.com.cn/forum/thread-8281812-1-1.html
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
后来发现,其实在ubuntu18下的ocaml版本支持下就能完成mldonkey的编译,并不需要降到14.04版去。最后我编译openwrt和它下面的软件,都是在ubuntu22下面进行的
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

厉害了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 wubozh 于 2023-4-7 21:50 编辑

三、用n2n组网。
      n2n我倒是用了好几年了,一直都蛮稳定。以前用n2n组网都是让它工作在点对点模式下。也就是,在手机、家里和单位的电脑、笔记本和每个路由器上都安装n2n,都给它们分配一个静态地址,这样,手机、路由器、电脑、笔记本就组成了一个虚拟局域网,无论身在哪里,都可以相互通讯,相互调用文件和远程桌面。现在安卓n2n出了新版本,支持n2n的V2和V3了,就想试下用n2n组建网对网功能。也就是,在家里和办公室的路由器上装上n2n,启用n2n的路由功能,让家里和单位没有装n2n的设备也能相互通过虚拟网通讯。没想到,这用熟了的软件,也让我踩了坑。在网上下的一个n2n3.0版,编译有问题,同一个版本,mipsel(Mr4用)和ramv7(K3用)平台下的都可以用,但openwrt-x86平台下的就是不能用-关键是它运行的时候也不报错,就是无法连网。因为不报错,所以我在vmware的openwrt-x86下连网测试不成功,在x86的小主机下也不成功。期间还因为它换过一次x86小主机的openwrt版本。后来才发现是软件包编译的问题。我的运气可真好,这种问题也能遇到。人品真的是没话说了。后来确定了是编译版本的问题,直接在openwrt的另一个软件源里,用了luci的n2n V3.06版解决的问题。虽然luci版没有直接用命令行使用来得方便,但总算能用了。
      先说说我的网络环境。家里是N3160小主机做主路由(PPPOE拨号,有公网IP),K3设置成无线ap模式;单位有个统一配置的主路由,无公网IP。我的办公桌上有个同事送的wan口不太稳定的Mr4无线路由器。连着办公电脑和网络打印机等设备。现在的要求是在x86小主机和Mr4无线路由器上装上n2n后,实现家里和单位的设备网络互访。下面来说说我的安装过程。
      1.小米无线路由器4刷openwrt,设置成无线ap模式。本来Mr4设不设置成ap模式都无所谓,但是这坑爹的Mr4只有三个物理口啊。一个口用来连接单位的主路由器,一个口连接我的办公电脑,还得有一个口连接我的网络打印机才行。这样就只有工作在ap模式下才行了。(也许有兄弟说,wan口接主路由不一样用吗?但这样我的办公电脑和网络打印机与单位的其他设备就不在一个局域网了)。Mr4刷好openwrt,在“接口”里删掉"wan"接口,然后在“设备”页把wan接口加入到br-lan里去,再在防火墙里删除wan防火墙区域,这样三个物理口都成了lan口了。
      2.Mr4和x86小主机更改软件源,都安装luci-app-n2n。由于家里有公网IP,所以把n2n的supernode部署在家里的x86小主机上。小主机上的edge的supernode指向本身127.0.0.1,Mr4上edge的supernode参数则指向家里x86小主机的DDNS域名的n2n端口,两者均设置静态虚拟IP。然后,在Mr4上n2n的luci界面添加一条指向家里的路由,例如:192.168.10.0/24,网关则是家里x86主机的n2n静态地址。同样,x86小主机上也添加一条指向单位的静态路由,如:192.168.3.0/24,网关是Mr4的n2n静态IP。这样,两边的网对网路由就通了。需要特别注意的是,如果单位的Mr4是主路由,这样已经没问题了,但单位的Mr4是无线AP,它本身不是网关,所以单位台式机的默认路由不是指向它,因此,单位台式机上还需要添加一条指向家里网段的静态路由,网关则是Mr4的物理IP,这样,单位台式机访问家里192.168.10.0/24的数据,才不会发向单位主路由192.168.3.1,而是发到Mr4(192.168.3.2)。也就是说,在n2n的edge装在旁路由上的时候,它下面的设备要访问对端的设备,需要在设备上添加一条指向旁路由的静态路由才行。方法:在windows的管理员权限的命令提示符下执行:route add -p 192.168.10.0/24 192.168.3.2(这里不是n2n的虚拟IP)
      3.路由通了,还需要防火墙放行才行。家里x86小主机上的防火墙我设置了三条规则,一条是放行supernode的对外监听端口,二是接受edge0虚拟n2n接口的输入,三是允许转发edge0虚拟接口的数据。如下(我的n2n接口命名为edge0):
iptables -I INPUT -i edge0 -j ACCEPT
iptables -A FORWARD -i edge0 -j ACCEPT
      Mr4那边情况复杂点。本来,如果Mr4也是刷的openwrt21.02版,使用iptables防火墙的话,在自定义防火墙里填入这两行规则就行。但我的Mr4刷的是22.03(自己给自己找不自在!其实是因为Mr4上有个必须的软件在21.02下无法安装,才刷的22.03),iptables规则不能用。好吧,在luci界面手工设定防火墙规则吧。这里需要说明的是,我的Mr4工作在无线AP模式下,所以用论坛里有个兄弟写的教程贴“n2n组网的正确姿势”里的设置不成功。我是这样设置通过的:
防火墙-Zones-lan里的Forward原reject设为accept
防火墙-Zones-lan,编辑,“高级设置”-"Covered devices"(覆盖设备)里勾上edge0,保存并应用
防火墙,上面常规设置-Forward,选accept(接受)
防火墙,下面Zones-Lan-勾上Masquerading(伪装)
      这样设置以后,家里和单位的n2n组网就成功了。电脑的网上邻居可以相互用物理ip地址访问。手机在家里和单位的wifi下也能打开对端的设置上的文件。如果手机在外面,需要访问家里和单位的设备上的文件的时候,在手机上安装安卓版n2n就行了。但目前安卓版n2n有个问题,没有填写n2n静态路由的地方,所以它只能访问安装了n2n的设备。

点评

能分享一下路由的N2N文件吗!!!  详情 回复 发表于 2023-10-26 03:28
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 wubozh 于 2023-4-8 22:01 编辑

四、挂移动硬盘和smb/nfs共享
      说起我的x86小主机挂移动硬盘,更是泪啊(换小主机的另一个原因是想替换K3当轻nas来用)。当时小主机买的时候便宜,没注意这家配的是2.0A的电源(其他家都是3.0A的)。买回来,刷好系统,按网上的教程装好驱动,插上移动硬盘的时候,发现怎么也发现不了移动硬盘,但我的U盘插上就没问题。后来想到可能是移动电源的供电不足,看电源参数,才发现是2.0A的。问商家,商家说,都是3.0A啊。我说,怎么我的是2.0的?商家再查了一下,说就是N3160这小机器配的是2.0的。没办法,网上又买了一个3.0A的航嘉的电源回来。等几天送到了,拿到手上一看,电源接口对不上,大小差一点点插不上去。实在不行了,把两个电源的线都剪了,接口换过来吧。接好能用了,插上小主机,通电,还是没有移动硬盘啊。难道是主板设计的供电不足?实在是不甘心,在网上到处找资料,后来发现有个帖子说,高速移动硬盘需要一个单独的驱动,kmod-usb-storage-extras和kmod-usb-storage-uas,在网上找到,装上就好了。现在想来,也许这机器,2.0的电源也够用了,但实在不想换回来了,毕竟2.0A要供小主机和移动硬盘也确实是小了点。
      移动硬盘挂上了,分区,格式化,再就是挂载了。挂载后,要共享。我的K3的smb以前用的是用户空间的smb程序。小主机刷上openwrt后发现有个ksmbd这个内核态smb共享程序,决定用它试试。装上了,怎么也没反应,又到处查资料,终于找到一个说明说是ksmbd安装后还要装一个ksmbd-utils工具软件,用它可以给ksmbd设置共享用户帐户。装上ksmbd-utils,用ksmbd.adduser -a命令给ksmbd设置好共享的用户名和密码,再去”网络共享“菜单就能打开smb共享了。由于我要在单位和手机上通过n2n来调用小主机移动硬盘上的文件,所以还得给ksmbd的监听接口参数里加上edge0接口才行。openwrt的luci界面没看到设置的地方,去openwrt的配置文件里找,找到有个smb共享的模板文件,里面可以把监听参数interfaces = br-lan改为interfaces = br-lan edge0可以实现同时在lan和n2n接口实现共享。再后来发现,其实luci界面下有个“编辑模板”功能,也能修改这个参数。经过使用发现,ksmbd内核态smb共享的传输速度,确实比用户态smb3/smb4的共享速度快得多了( 不过手机的X-plore目前不支持ksmbd共享,要用ES文件管理器才行*后来发现,打开ksmbd的低版本smb支持,X-plore就可以使用ksmbd的共享了)。
      nfs共享,用来看电影是必须的。我在使用K3的时候就发现,由于协议兼容性的问题,nfs这种linux下原生的文件传输协议在大文件传输的时候速度和稳定性比smb要好得多。很多电影用smb看卡得不行,用nfs协议就很流畅。没想到,openwrt下的nfs共享也让我踩了个坑。设置好openwrt的nfs共享,在手机上却怎么也找不到。没办法,用虚拟机下的ubuntu来连接测试,才发现问题是openwrt下的nfs共享,不允许共享移动硬盘的根目录。NND的。没办法,把几个重要的目录在nfs下分别共享吧。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 wubozh 于 2023-4-7 22:00 编辑

五、docker
      在小主机上刷了纯净版openwrt后,自己再安装软件,有好多软件无法安装,或者安装后无法正常运行。我遇到的就有aria2,docker,“师夷长技以制夷”+,更不用说什么pass我和小懒猫了。其中最叫人头疼的是docker,安装好后,只要一运行容器主机就重启,openwrt换版本也不行。后来决定了,为了兼容性,openwrt就用21.02版,下载官方源码自己编译。然后在编译出来的纯净版上,再把这几个重要但不兼容的软件一个个加上编译到openwrt里去,编译一个用vmware测试一个。期间,在编译docker到固件里去的时候,两次遇到docker在刷好的固件里只有一个“配置”菜单项,没有其他子菜单的情况。没办法,把docker要用到的依赖全部找出来,然后在make menuconfig的时候一个个核实手工添加,最后编译出来的docker才是完整功能的。在编译固件的过程中,还遇到一个大坑,就是用官方源码编译的固件,修改了配置编译出来刷到机器上,无法安装官方软件仓库里的需要内核模块依赖的固件。开始不知道原因,以为是自己编译的问题,重新编译了几次,还是如此,在网上查资料,才发现是openwrt的一个保护机制,修改了配置后编译出来的固件它的md5校验值会变化,而官方软件仓库里的需要内核模块依赖的软件安装的时候要验证固件的md5值,与官方不一样它就不让安装。可是从来没人告诉过我啊。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 wubozh 于 2023-4-7 21:32 编辑

六、写在最后,求援
      目前我在固件里基本加上我所需要的全部软件了。只是有一个没想到,我固件里的“师夷长技以制夷”+(酸*酸*r),它提供的代*L服务是socks5的,而且要用用户名和密码才能连接,而手机和电脑有些软件不支持加了帐户验证的socks5代理,没办法,又找了polipo和privoxy来把socks5转换成http。但polipo不支持帐户验证的socks5,所以只能用privoxy了。安装后,路由器本身确实是可以通过privoxy转换过来的http代*L来上网,但局域网内的其他机器就不行。查看privoxy的日志,显示privoxy接收到了局域网的机器的代*L请求,但在转发的过程中出错。但x86小主机自己的终端就可以通过这个http代*L来上网。反复查看配置参数,监听和允许地址参数都是对的,实在是不知道问题出在哪儿了。甚至装了个docker版的privoxy来测试,也一样,只能路由器自己本身连接,局域网的其他机器就不行。有知道的兄弟请在下面告诉我一声,或者知道“师夷长技以制夷”的socks代*L怎么能够不加用户名和密码启动的办法,也请告诉我一声。这个privoxy是后装的,当时编译到固件里去。不知道随固件一起编译的话,这个问题能不能解决?
      另外就是,我的“师夷长技以制夷”,在随固件一起刚刷到小主机里去的时候,找了些免费的代*L节点是可以用的,但用了一段时间之后,不知道是软件出了问题,还是最近屏蔽加重的原因,现在近20个节点(都是在电脑上验证了可用的)却都只能软件里加载,但验证谷歌连接却不通了。这种情况已经几天了。而且“师夷长技以制夷”的"自动切换节点“的功能,好像也没起作用,节点似乎一直没切换过。等再观察一断时间,找找原因,不行的话,恢复固件到出厂状态再重新配置试试。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-28 08:29

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表