分类 软路由 下的文章

用了很多年panabit了,相信很多人都在登录panabit时要点击信任排除证书什么的操作习以为常了。最近刚好有时间,就研究了一下替换证书(更关键的是没找到完全贴合我需求的文档,只好自己做一遍记录下来了)

实际上ip也是可以签发证书的,只不过没有免费的,所以我们需要给自己的panabit配置一个域名(多半时候二级域名就可以),并且去letsencrypt申请一个免费的证书(当然免费有免费的缺点,只有3个月有效期,当然你也可以去申请1年有效期的,我由于用的是通配符证书,所有二级域名用一个,反正也要3个月弄一次,所以就拿来直接用了)

//2021-04-07更新 追加自签发证书,更新证书太麻烦了,终于忍不了了,生成自签发根证书,生成了一个100年有效期的IP证书,把自签发的根证书导入系统和火狐浏览器以后就可以使用了,再也不用更新证书啦:)

接下来进入正题,申请域名证书的过程略,网上搜索一大堆,我就不在这里说了。

首先ssh登陆我们的panabit主机,panabit默认用户名root,默认密码panaos。
panabit存放https证书在如下两个路径,带system的是硬盘保持的文件路径,ramdisk是内存运行时的文件路径

/usr/system/admin/admin.pem
/usr/ramdisk/admin/admin.pem

我们需要替换2个文件中的证书,通过vi编辑文件,删除掉原有内容,将letsencrypt申请的证书文件cert.pem和privkey.pem里的内容依次粘贴进去即可,当然如果你命令行操作不熟练,可以使用WinSCP把文件下载下来改完在上传,注意协议要选SCP才可以连上。

接下来,懒人可以直接重启panabit服务器了,当然如果你直接重启服务器的话,前面是不用替换ramdisk目录那个文件的。

我替换2个文件的原因是不想重启就让它生效,搜了一些文章发现没有写怎么停和起https服务的,于是自己研究了一下,发现/usr/system/bin/ipectrl这个脚本,脚本里有启动的命令,于是就知道了怎么停止https服务了:)

停止https服务的命令

/usr/system/bin/ipectrl stop httpd

注意,此时已经生效了,因为panabit的https服务有守护进程,结束了会被立刻启动的。

当然,如果你没有启动,可以用下面命令启动一下

/usr/system/bin/ipectrl start httpd

至此就完成panabit上面的配置,还差最后一步,本来我想直接改hosts文件了事,结果浏览器告诉我不安全,所以又去设置了一下我的这个二级域名解析,给它解析到我的内网IP了,当然不用担心安全问题,毕竟别人不知道你这个域名,也访问不了你的内网,再说就算泄露也顶多泄露了你这个内网管理地址而已。

至此,终于可以直接通过域名打开panabit管理界面,看到绿色盾牌图标了:)

然而,并没有结束,此时的证书在部分浏览器里显示正常,但是很多默认不启用TLS1.2以下支持的浏览器依然会提示网站使用较弱的加密,接下来我们升级panabit的openssl。

打开下面网址,下载最新的openssl应用组件,我下的20200915版本的,限制panabit版本,需要2020年7月1号,NANBEIr5以上的版本才能使用,所以你可以能需要顺便升级一下panabit的版本。

注:openssl组件里就有网页替换证书的功能了,不过我没研究它支持什么版本,我用免费证书直接导入是失败的,反正用前面我的手动方法好用就可以了。

近几年,国内各大电信运营商因为利益驱使纷纷开始在DNS服务器上搞域名劫持,通常的现象就是我们访问一个不存在的域名(比如我们打错了),运营商会自动跳转到一个智能域名纠错的网站,通常还包含有各种广告,很是烦人。

有时候由于一些网站使用CDN加速,甚至是正常的域名偶尔也会解析到广告IP,解决这种问题的最根本办法就是建立自己的DNS缓存服务器,我所在的公司就因为经常遇到DNS劫持和DNS服务器服务不稳定等问题而不得不自行搭建DNS缓存服务器来一劳永逸的解决问题。

不过很多个人用户无法搭建自己的DNS缓存服务器,针对个人用户有两种解决办法,一是使用自制(Linux)系统的路由器进行设置,比如Tomato固件的路由器就有类似功能,首先ping一个不存在的域名,记下解析到的IP,然后到管理界面,找到Advanced-DHCP/DNS,找到Dnsmasq,填入bogus-nxdomain=60.19.29.21

60.19.29.21这个IP是我的宽带运营商的广告IP,请按自己的做修改,可以填写多行,运营商定期会更换IP的,我就把60.19.29.21-60.19.29.25都填进去了,保存即可生效,再次ping一个不存在的域名,就会提示不存在了。

如果没有自制系统的路由器,那就需要更改本机的DNS了,改成opendns或者其他的,或者自己改hosts文件,把广告的域名都解析到本地127.0.0.1这个IP上。

我和一个朋友各自有自己的宽带,由于住的近,就拉了条网线做互联,虽然看似简单,可是具体到技术实现又有了问题,以下是几天的漫长折腾,写这篇文章的时候才完全搞定。

首先说一下具体需求:

第一,两家局域网要做互联,要可以互访;

第二,两家正常上网还要走各自的宽待,不能相互影响(dhcp各自是各自的);

第三,我家宽带访问教育网快,我需要为我朋友提供部分地址的路由;
首先就排除了使用同一网段的打算,因为这样无法做复杂控制,也无法通过dhcp来同时搞定两家的所有计算机(不想人工设置IP地址,呵呵)

既然决定分两个网段,那么互联就成问题了,还好我的路由器(netgear 614v6修改版200M的CPU/4M固件/32M内存)支持自制系统,以前就刷了tomato固件,由于我更需要openvpn的功能,所以选择ovpn的mod版本,花了很多时间配置VPN,这里不详细说,主要说说怎么搞定vlan的吧,实现vlan就相当于让我的路由器支持两个网段的客户端,并且也可以互相路由了。

放狗搜了一下,发现中文资料太少了,于是还是上www.google.com吧,找到一篇很有价值的文章,链接如下

http://www.seiichiro0185.org/doku.php/blog:creating_a_seperate_guest_network_with_tomato

懂英文的建议看看,很简单其实

说说我的过程,路由器型号netgear 614v6

我家的网络192.168.1.0/24 网关192.168.1.1

朋友家的网络192.168.2.0/24 网关192.168.2.1

!!!注意:以下操作请谨慎操作,除非你知道你自己在做什么,本人不对因此发生的故障负责!!!

先要命令行登入路由器,telnet或者ssh,看你的路由器固件了

nvram set vlan0ports="2 3 4 5*" 
nvram set vlan2hwname=et0 
nvram set vlan2ports="1 5*" 
nvram commit

说说含义,第一条,设定我家里的本地vlan0端口,2口,3口,4口还有无线

第二条,设定vlan2,第三条,设定vlan2使用1口,这个口也就是我和我朋友互联的接口

完成之后就可以登陆进web界面操作了

先配置vlan2的IP,由于默认系统已经可以配置好vlan0,但新建的vlan2无任何配置,我们需要配置它的IP

 Administration-Scripts-Init

在这下面填入vlan2的配置脚本

sleep 10; 
ifconfig vlan2 192.168.2.254 netmask 255.255.255.0 up;

这句的含义是配置vlan2接口地址为192.168.2.254,我朋友家的网关是192.168.2.1

接着增加防火墙策略,允许vlan2

 Administration-Scripts-Firewall

增加两行策略

iptables -I INPUT -i vlan2 -j ACCEPT; 
iptables -I FORWARD -i vlan2 -j ACCEPT;

这里是允许访问所有网络,如果不希望访问某些网络的话,可以详细设置

比如下面这条就是不允许两个内网互访

iptables -I FORWARD -i br0 -o vlan2 -j DROP;

最后到我朋友家,在他家的路由器上增加几条静态路由即可

我家的网络192.168.1.0/24,网关是192.168.2.254

朋友需要借用的xxx.xxx.xxx.xxx/32,网关是192.168.2.254

OK,一切结束,重启一下路由器,看看是否有效。

新买了个带USB接口的无线路由器(中兴H118B),终于可以尝试把PXE网络启动服务全装在路由器上了,以前只是路由器上配置dhcp指向局域网的一台TFTP,现在可以完全跑在路由器上了。
方法很简单,刷机成openwrt,这个就不说了,太简单了,我刷的是http://downloads.openwrt.org/backfire/10.03/brcm-2.4/openwrt-brcm-2.4-squashfs.trx
如果只需要传统的pxe,也就是dhcp+tftp的话,openwrt全都自带,ssh登录进路由器,输入以下指令即可

 uci set dhcp.@dnsmasq[0].enable_tftp=1
 uci set dhcp.@dnsmasq[0].tftp_root=/mnt/usb/tftp
 uci set dhcp.@dnsmasq[0].dhcp_boot=/mnt/usb/tftp/gpxelinux.0
 uci commit dhcp

注:/mnt/usb/目录是我U盘的位置
由于我用gpxe,所以还加入了ftp的配置,这样可以网络启动通过ftp来传输引导文件

 #opkg install pure-ftpd
 #vi /etc/config/pure-ftpd #按下面进行修改
config pure-ftpd
 option port "21"
 option noanonymous "0"
 option chrooteveryone "0"
 option maxclientsperip "5"
 option maxclientsnumber "4"
 option peruserlimits "3:4"
 option umask "133:022"
 option authentication "unix"
 option enabled "1"
 #vi /etc/passwd #增加下面一行创建ftp匿名访问的账户
ftp:x:500:500:Linux User,,,:/mnt/usb/tftp:/bin/false

注:这里配置的ftp为开发匿名访问,如果不需要匿名把option的noanonymous改成1就可以了

更多uci命令请参考http://wiki.openwrt.org/zh-cn/doc/uci