分类 折腾=-= 下的文章

书接上回:计划:基于IPv6实现IPv4应用层组网我意识到n2n可以满足我的实际需求,并且它是完全自由和免费的!

什么是n2n?

Github ntop/n2n :Peer-to-peer VPN

n2n is a light VPN software which makes it easy to create virtual networks bypassing intermediate firewalls.
简单来说n2n是一个C语言编写的轻量级VPN软件,可以轻松的创建一个通过防火墙的虚拟网络。正如项目简介所言,n2n主要依赖点对点完成通信,对于无法穿透的NAT环境将自动使用超级节点进行failback。

搭建n2n 超级节点

首先需要安装n2n,过于简单,请参见项目仓库。(不要使用apt安装,一定要选择github的最新稳定版代码自行编译或使用编译好的release。

官方文档描述已经足够详尽,你只需要注意开放选定的tcp+udp端口,我选择了8080.
此外,还需要开放udp端口,53/5645 (或者,如果你的服务器没什么有价值的udp服务的话,干脆在防火墙把udp全放行了。)
我的节点:xfox.fun:8080
4Mbps小水管,你就别指望我这节点能拿来转发你的流量了,最多帮你打通p2p,转发还不如你自己开个或者用免费的frp/NPS服务器。

运行普通节点

过于简单,不过多描述
basic usage:  edge <config file> (see edge.conf)

        or   edge  -c <community name> 
                   -l <supernode host>:<port> 
                  [-a <tap IP address>] 
                  [-d <tap device name>] 
                  [-k <encryption key>] 

-h shows a quick reference including all available options
--help gives a detailed parameter description
man files for n2n, edge, and superndode contain in-depth information

较为复杂的配置,自己看/etc/n2n/的example文件
两种节点都支持systemd持久化运行,文件会在安装后自动释放,你只需要参考example编辑新的配置文件:edge.conf/supernode.conf

编写一个跨平台n2n GUI客户端

n2n提供了udp信息展示接口,已有第三方编写的Windows、Android客户端,但是我用的是Gnu/Linux,而我的大部分非自由软件爱好者朋友玩游戏往往使用Windows,所以我需要一个跨平台的n2n客户端提供尽可能一致的用户体验,Python显然是个不错的选择。

设计界面布局

基于n2n的参数需求,需要以下几个必须元素

  • 输入框

    • 服务器地址
    • 社区名称(community)
    • 认证密钥(非必须)
    • 自定义地址(非必须)
  • 选择框

    • 加密方式(非必须,默认AES-CBC)
  • 标签

    • 信息显示框(当前连接状态)
  • 按钮

    • 启动连接

开发难点

编译n2n(Windows),这一个就难到我了,因为我压根就不想下载Visual Studio,并且MinGW构建失败(我还为此购买了Windows10 Pro的激活码,但是还是很遗憾没有成功)。不过,仔细看看了看日志,貌似是因为choco安装MingGW时没有给予足够权限造成的,所以干脆卸载了MingGW,git,make重新安装了一遍。
第二次编译,卡在了make test:

...
cp src/example_sn_embed example_sn_embed
scripts/test_harness.sh tests/tests_integration.list
tests/../scripts/test_integration_supernode.sh >tests/test_integration_supernode.sh.out

这就很糟糕。
不过查看目录发现似乎已经编译成功了。确定可以编译通过后修改了一下编译包版本名称和目标系统名称,Windows10下的编译问题算是解决了。
在WIndows上运行前需要安装TAP驱动下载地址,搜索tap-windows如无其他异常就尽可能使用新版本。比如tap-windows-9.24.7-I601-Win10.exe 至于9.24.8,暂时没有一键安装的二进制应用....

GUI-n2n使用说明

本程序设计使用理念:由了解n2n相关配置方法的开发者/用户为其他用户(你的任何不了解计算机技术的朋友,同学,家人)提前编写好配置文件后直接打包交给用户。

GUI-n2n是使用Python3+tkinter编写的跨平台程序理论支持Linux,Mac,Windows,不考虑兼容Python2的任何版本。对于Windows7用户,请使用Python3.8编译运行。
Windows用户使用前应安装TAP驱动,服务器地址应包含端口,加密密钥可以为空,默认AES-CBC加密(密钥必须为ASCII字符),默认启动后使用当前程序所在目录下的配置文件(GUI-n2n.config)设置,如果你不理解我在说什么则不要修改任何配置。

在WIndows10下也会有类似问题,比如使用Tab自动补全失败的时候。扬声器突然大声dou的一声,很容易打扰别人休息。

参考资料:
linux 关闭主板上的蜂鸣器声音
PC speaker

我当前使用的是Debian11 bullseye +KDE,所以我不必极端的使用 rmmod pcspkr的方式避免触发beep。
通过KDE的“系统设置”→“辅助功能”→“响铃”,我可以关掉他。

为什么我要更换到Debian?Mint等下游社区对原Ubuntu的修改一定程度上使系统更加开箱即用,但也对一些功能的使用造成了限制,Ubuntu并不是一个彻头彻尾的自由软件,尽管我不追求完全使用自由软件/剔除专有软件,我仍然无法接受自己使用的操作系统可能潜在的法律风险。俄乌战争时期Nginx等软件及过去Apache基金会等组织的行为也表明了任何可能受到国家控制的组织信用均不可信。我不想把自己的自由倾注于不可靠的组织,特别是专有软件厂商和无法摆脱美国等国家影响的基金会。相比Ubuntu,Debian显然是更自由,更容易避免政府影响的选择。

- 阅读剩余部分 -

华为手机:连接被拒绝,我的PC也提示无法连接。
更换信道,重启,恢复出场设置均无法解决问题。
5G 分频的SSID时显时不显示,不知道什么情况。
2021年4月29日买的,没拆过机,功能之前也都正常,就很奇葩。
到现在用了607天了,目前个人怀疑官方故意拉高功放功率长时间超负荷发射导致器件损坏。

2023年1月3日更新

当时出现问题后我把5G AP关掉了,今天打开了,可以正常连接使用了。
具体原因尚不明确,小米的东西稳定性确实不敢恭维。

2024年3月24日更新

去年年底回家5G WIFI又是要么连不上,要么干脆扫不到SSID,今天回家又能连上了。玄学。

上个月就买了,这个月七号才拿到,快递单子上满是备注xx日交通管制。

设备信息

ADB默认是开着的,非常人性化。远程看到默认界面被一个包名为com.wowi.nanowebyl的蓝色界面APP挡住,没有root权限无法删除和停用。
PS:Windows的环境配置是真的烦人,没ADB环境还得指定目录用ADB,要是只需要ADB就能解决我绝对不用Windows10折腾。

型号:QC-SC01
SSID:UFI-12E1
硬件版本:HW1.3
软件版本:903B_QR_CS01_WEB_V1001_221101
WEB版本:WEB_V1.0.220#
基带版本:UFI003_CT 20211210

全量备份

为了防止变砖,先9008备份一波
adb reboot edl
掏出miko_service_tool_pro_v5.3备份

备份基带QCN

准备QPST
准备开搞提示:Port does not contain a Phone in Diagnostics Mode
然后发现我这9008端口对应Download mode,那去查查怎么进入Diagnostics Mode(好像是900E?)
貌似需要ROOT权限?先试试adb 有没有权限,没权限就修补提取的boot镜像拿到root权限。
adb shell
su
setprop sys.usb.config diag
setprop sys.usb.config adb
试了试没root权限,只能修补boot咯。

拿下ROOT权限

浪费一下午到晚上得出的结论我用miko_service_tool_pro备份的boot镜像文件是不能被Magisk修补的,而Premium Tool 9008备份出来的就可以,并且CRC校验发现这俩软件备份出来的各个分区文件都是互不相同的。(可能实际文件格式就不一样)

第一件事,把狗皮膏药com.wowi.nanowebyl卸载了

备份基带

棒子似乎刚开机的时候会处于Diagnostics Mode,也可能是9008 EDL下Miko控制其自动跳到Diagnostics Mode。
总而言之阴差阳错,在拿到root把QCN给备份了....

刷入Boot时报错fastboot: error: Couldn't parse partition size '0x'.

查了查,貌似小米经常出现这个问题,加上:raw可解决:
fastboot flash:raw boot

拆机换自己的卡

拆机发现连SIM卡槽位都没焊接,真的无语。旁边有个天线座子也没焊接,唯一的天线是屁股一块簧片触点接着的PCB软天线,电信信号非常拉跨。
12月22日更新:用低温锡膏和电烙铁一次成功焊上卡槽(比上次焊废了俩卡槽还没成功的体验好太多了),测试发现移动卡可用,但是信号非常差,甚至不如内置的电信。

重装CPE.apk

今天打开发现没WEB控制面板了,想了想可能和自己折腾的时候卸载了什么有关,于是对比了自己提取的system.img发现官方的system\priv-app里有个CPE.apk,不出意外就是这玩意了。
ES文件管理器一看包名,正是com.wowi.nanowebyl,丢回system\priv-app原位,卸载当前第三方桌面,重启=-=
果然熟悉的蓝屏界面:
设置
打开 4G 数搌
关闭 4G 数
打廾飞行式
四个按钮回来咯,打开192.168.100.1 WEB认证页面也恢复了。

使用体验

内置的ESIM芯片走的电信江苏南京物联网通道,因为单个垃圾软天线信号不好再加上可能有限速所以上下行很低,延迟较高且不怎么稳定。通过RNDIS 连接笔记本后Ping我的博客服务器(腾讯云杭州机房)最短 = 52ms,最长 = 105ms,平均 = 67ms

AS:CHINATELECOM-IOT-JIANGSU-NETWORK IOT Jiangsu network, Chinatele

并且,此卡获取不到IPv6地址,这就非常令人不愉快了。
唯一的好处可能是电信网络的墙内墙现象较少,Steam裸连能正常登录,Github和Github Page也没因为DNS污染GG。

我选择了Docker部署,因为我不打算继续接触宝塔。

主要坑点:

  1. 在没有更改端口的情况下,默认你必须在防火墙放行23333和24444端口

    当然,出于安全考虑我选择了反代默认端口。
  2. Docker里默认没有Java环境,你必须先在面板里选择构建一个新的JDK17镜像作为运行环境再构建服务器实例。

    因为JAVA环境在容器里,所以进程启动方式选择虚拟化容器并设置端口绑定端口25565:25565/tcp (你想换非默认我没意见,我自己还加上了UDP)
  3. 第一次启动服务器后,你需要手动编辑官方服务端生成的EULA文件把否改为是再重新启动服务器。(不会有人写中文“是”吧?xd)

    MCSM提供了快速的编辑选项,但是我是第一次用这个面板,还没摸索到那里就直接手动改好文件了。

这好像是我第一次在自己的设备(云服务器)上开服务器?

其实我只是不想浪费2c2g4m的服务器罢了=-=,毕竟挂博客没多大占用。不然我就在NAS上开再内网穿透了。

服务器地址:xfox.fun 端口默认25565,懒得搞SRV了

2024年更新:
服务器使用LinuxGSM部署在NAS上,IPv6直连:v6.home.xfox.fun

EA的服务器就像烂番茄,不是在出问题,就是在出问题的路上。
EA三部曲:
1.您的凭据不正确或已过期。请重试或重置您的密码。
2.很抱歉,我们遇到了一些技术难题。请稍后再试。
3.您的认证信息不正确或已过期。请重试或重置密码。
什么?网络有问题?今天你学习强国了吗?乐~~

冷静思考

根据17次登录和重置操作做出猜想:EA可能对登录设备和IP地址进行了对比,如果重置密码时使用了代理,登录时也应当使用相同的IP做代理。一旦使用EA各项服务的过程中多次改换IP地址,就会不断出现“EA三部曲”问题。

似乎密切相关的信息

解决网络原因导致的Origin/EA DESKTOP 您的计算机目前处于离线状态 / Double-Check your connection / 目前不能使用您的账户在本机连接到EA服务器激活————Posted on 2022年1月19日 by 羽翼城|Dogfight360
EA Desktop客户端登录似乎有一个必须的校验服务器,HOST对应关系:
159.153.190.222 proxy.novafusion.ea.com
测试发现国内外可以正确解析IP地址但是完全无法ping通,可能服务器关闭了Ping回复。
CURL请求发现校园网环境下(IP出口为移动宽带)无法正常请求,但代理后以及其他多地服务器测试均可正常请求,猜测可能被本地运营商或学校防火墙阻断。(试过本地运营商的5G流量能打开,没有被阻断,所以后者的可能性更大)
PS C:\Users\xfox> curl https://proxy.novafusion.ea.com
curl : 基础连接已经关闭: 发送时发生错误。
........

校园网....乐.....
Fiddler抓包发现,EA Desktop启动后验证服务与以下域名密切相关密切相关

校园网环境下通过Steam调用EA启动BF1截图2022-10-31T17:56:12.png
confluence.ea.com:80
ratt.juno.ea.com:443
当然这只是开头的一两个,实际登录过程还有很多别的域名,下面会总结以下。
移动5G流量环境下截图2022-10-31T18:19:59.png

顺便,我通过5G移动网络进行了一次登录的测试,第一次毫无疑问依旧出现EA三部曲问题里的问题1,但是在不加代理完成一次更新密码的操作后,EA客户端顺利的完成了一次登录。这佐证了我的猜想,EA确实对帐号登录和密码重置时的客户端IP有严格的校验。

猜想2(尚未证实但是证实了别的)

校园网防火墙限制单个帐号带宽的同时还加强了对特定网站/数据包类型的限制。
使用校园网(移动)出网口Ping ratt.juno.ea.com发现解析到 e16166.e12.akamaiedge.net [23.5.245.219]延迟高达205ms+
而使用移动5G流量解析到了 e16166.e12.akamaiedge.net [223.119.223.211]最短 = 77ms,最长 = 117ms,平均 = 92ms
查询得知前者是美国加利福尼亚圣何塞 Akamai机房,后者是香港移动机房。
显而易见的,不管校园网有没有故意墙端口,都可以发现本地移动宽带在出口线路质量上远不如移动的数据流量。(大概因为后者更贵吧xd)随后我再次切到校园网发现EA客户端快速掉线,Ping ratt.juno.ea.com解析到了 e16166.e12.akamaiedge.net [125.56.150.63] 最短 = 102ms,最长 = 751ms,平均 = 140ms 数据包: 已发送 = 23,已接收 = 17,丢失 = 6 (26% 丢失)
这个丢包率可真行,现在可是凌晨2:48!所以,在我对这些关键域名完成转发之前,我最好老老实实开流量玩。=-=

总结EA客户端启动到登录完成所需域名:

ratt.juno.ea.com
service-aggregation-layer.juno.ea.com
accounts.ea.com
api1.origin.com
pc.ea.com
service-aggregation-layer-subs.juno.ea.com
c.go-mpulse.net
contentful-proxy.juno.ea.com
pin-river.data.ea.com
bam.nr-data.net
storage.googleapis.com
www.google-analytics.com
pin-em.data.ea.com
groups.gameservices.ea.com:443
friends.gs.ea.com:443
sdk.split.io
rtm.tnt-ea.com:8095
achievements.gameservices.ea.com
cdn.mcr.ea.com

Steam调用EA2Link启动BF1请求域名列表

ratt.juno.ea.com
accounts.ea.com
api1.origin.com
service-aggregation-layer.juno.ea.com
pc.ea.com
service-aggregation-layer-subs.juno.ea.com
pin-river.data.ea.com
contentful-proxy.juno.ea.com
bam.nr-data.net
www.google-analytics.com
c.go-mpulse.net
pin-em.data.ea.com
storage.googleapis.com
friends.gs.ea.com:443
groups.gameservices.ea.com:443
sdk.split.io
rtm.tnt-ea.com:8095
gateway.ea.com
events.split.io
privacy.xboxlive.com
presence-heartbeat.xboxlive.com

理论上确保这些域名的请求正常响应就可以保证EA客户端正常上线且保活。

更新:校园网连SSH都ban了,已向老师求证

一个字:

前言

自从开始把越来越多的工作生活需求在Gnu/Linux发行版下实现,我一直想要一个可以通过WIFI直连(WIFI Direct)实现PC和安卓的点对点高速协同的软件包,但是网上找了找没找到,绝大多数都是需要局域网实现的,想了想平时经常手机给PC开热点,那其实也就没那么重要了。
昨天折腾了半天,但是PC一直连不上安卓客户端,跑了个Nodejs web服务测试发现局域网也打不开但是ICMP Ping的通,我刚开始以为是自己路由器配置有问题导致出现AP隔离的情况,可是切换到Windows10用KDE-Connect反而能连接上,那显然就不是R3G的OpenWrt配置错了。

顿悟

今天晚上安装OpenShot给室友剪视频,折腾过程中无意间看见设置里有个防火墙,打开一看默认防火墙开着,而且默认传入是拒绝,瞬间就意识到为什么昨天晚上扫描不出来设备,也连不上......

首先把防火墙先关了,接着重新运行昨天的web项目测试,不出意外的正常访问了,那么肯定昨天晚上因为防火墙拦截了传入的流量。

安装KDE-Connect

还好昨天晚上没卸载安卓端....现在apt install kdeconnect即可
经过测试,因为是我的手机开热点,还是扫不出来,可能是客户端默认不会扫描请求路由器的地址,通过host名称也无法识别,但是安卓端写好IP地址马上就出来PC了。
现在我可以愉快的实现文件互传和剪切板内容发送了。

保证安全

显然,我不能总是关闭防火墙,在不安全的网络环境下相当危险。所以去查询以下完成通信需要哪些端口吧,在KDE UserBase Wiki里提到:KDE Connect 在 1714-1764 内的动态端口使用UDP和TCP协议 。
接着我发现,Mint21自带的Gufw Firewall已经内置包括KDE connect在内的超多应用的规则,只需要搜多KDE connect即可选择启用。还能快速选择“语音服务和P2P”以及“全部服务”这样的常用大范围规则,真是人性化:)