MoreRSS

site iconsmj | 三文修改

博客名:方寸之间。年更,喜欢阿加莎,社恐。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

smj | 三文的 RSS 预览

修复Arch Linux的内核缺失问题

2023-08-20 09:20:07

起因

早上打开电脑,Terminal 久违地更新一下系统,因为太久没更新,很多要更新的包,所以更新的时候打开浏览器去做别的事了,结果还没看两分钟,电脑突然黑屏了。。。什么反应都没有,但是能听到电脑还在转,也没多想,我就直接强制关机了。结果,再启动电脑,进入 grub 界面,直接不动了(一般默认 5s 自动选择),手动选择,提示:

Loading kernel linux-zen
error: file '/boot/vmlinuz-linux-zen' not found
Loading initial ramdisk
error: you need to load the kernel first
Press any key to continue...

猜测应该是因为更新内核的时候电脑被强制关机导致内核出问题了。在 Arch Linux BBS 上找到了一些解决方案,这里记录一下。

我使用的是linux-zen内核,所以后面的相关内容都有-zen后缀,这个根据你自己的配置更改,一般安装的都是linux内核,去掉-zen后缀即可。

解决方案

使用 Arch Linux 安装介质

  1. 进入 live 环境后,连接网络,我用的是 iwd
[root@archiso]# iwctl
[iwd]# station wlan0 connect wifi-ssid # 连接指定Wi-Fi
[iwd]# station wlan0 show # 确认是否连接成功
[iwd]# exit
  1. 挂载/boot分区
mount /dev/sdaX /mnt
mount /dev/sdaY /mnt/boot
  1. chroot 系统,重新安装内核
arch-chroot /mnt
pacman -S linux-zen
  1. 重新生成 grub 引导
grub-mkconfig -o /boot/grub/grug.cfg
  1. 取消挂载分区,重启
exit
umount -R /mnt
reboot

启动之后,就可以正常进入系统了。

grub 命令行

这个方法和上面的类似,不过不用使用安装介质

确认/分区位置

  1. 使用ls列出电脑上所有硬盘,输出类似:
grub>ls
(hd0) (hd0, gpt1) ...... (hd1, gpt4)
  1. 确认/分区,可以使用cat/ls命令+Tab测试,例如:
grub>ls (hd0,gpt3)/ TAB
boot usr ....

上面的输出说明(hd0,gpt3)/ 分区。

手动加载内核

  1. 设置根分区和 grub 路径前缀 假设(hd0,gpt3)是根分区:
grub>set root=(hd0,gpt3)
grub>set prefix=(hd0,gpt3)/boot/grub
  1. 加载内核和系统镜像
grub>cat (hd0,gpt3)/boot/grub/grub.cfg #确认`/`分区的设备名称,假设是`/dev/sda3`
grub>linux /boot/vmlinuz-linux-zen root=/dev/sda3
grub>initrd /boot/initrd-linux-zen.img
  1. 启动系统
grub>boot
  1. 重新配置 grub 启动之后,按照第一种方法的第 2、4、5 步,在命令行下重新生成一下 grub.cfg 文件即可。

参考链接

https://bbs.archlinux.org/viewtopic.php?id=274616

https://wiki.archlinux.org/title/GRUB#Using_the_command_shell

安装定制化Vim

2023-08-10 16:07:52

以前在使用 Vim 编写代码的时候就发现,Vim yank 的内容无法直接进入系统剪切板,稍微 Google 了以下发现好像需要使用第三方软件(Linux 上的 xclip 或者 MacOS 上的 pbcopy),懒得折腾,就新开一个 Terminal,然后 cat 出来文件内容,拷贝需要的内容然后使用(没想到吧;D)。

最近在折腾 Vim 环境的时候,又发现了这个问题,这下不能忍了,所以索性找找有没有简单的解决方法。最后勉强找到了几个我认为比较简单的解决方法。

0. 确认是否带有剪切板特性

vim --version | grep clipboard

如果输出+clipboard代表有剪切板特性,恭喜你,可以直接下拉进入文末;如果出现-clipboard则说明没有,那你可以接着往下看。

1. 使用 gvim

直接安装 gvim,带有命令行版本的 Vim 是支持剪切板特性的。

sudo pacman -S gvim

2. 使用 Arch Linux 社区的第三方源仓库

鲁迅曾说:遇事不决,上 Arch wiki。

官方 wiki 的 Vim 界面提到了一个 Unofficial Repository herecura,这是一个个人维护的源仓库,里面是一些个人编译的 Linux 软件。

将以下内容加入/etc/pacman.conf

[herecura]
Server = https://repo.herecura.eu/$repo/$arch

然后安装vim-cli

sudo pacman -Syu
sudo pacman -S vim-cli

3. AUR 安装

  • 如果你对 AUR 了解比较多,可以尝试自己构建 PKGBUILD 文件。

  • 如果不了解也没关系,我们可以直接找现成的。可以选择直接修改 Arch Linux 官方的 PKGBUILD,在这基础上加入 clipboard 功能支持。

i. 克隆官方的 Vim 包构建仓库:

git clone https://gitlab.archlinux.org/archlinux/packaging/packages/vim.git

ii. 修改PKGBUILD文件,修改--with-xyes,为了节省时间,可以去掉 gvim 的构建。

<details> <summary>点击这里查看修改后的PKGBUILD内容</summary>

点击这里复制

pkgbase=vim
pkgname=('vim' 'vim-runtime')
pkgver=9.0.1678
_versiondir=90
pkgrel=1
pkgdesc='Vi Improved, a highly configurable, improved version of the vi text editor'
url='https://www.vim.org'
arch=('x86_64' 'x86_64_v3')
license=('custom:vim')
makedepends=('glibc' 'libgcrypt' 'gpm' 'python' 'ruby' 'libxt' 'gtk3' 'lua'
             'gawk' 'tcl' 'zlib' 'libcanberra')
source=(https://github.com/vim/vim/archive/v${pkgver}/${pkgbase}-${pkgver}.tar.gz fix-perl-build.patch
        vimrc
        archlinux.vim
        vimdoc.hook)
sha256sums=('e0b52a997b4f6180c5d8a5dae717075d99650c3e2e7761d1878a3dd7011ec315'
            'f79c2afd26bbe0b21375293203d8f0e8dad2424146014ceafc4e8eca6ecf7d39'
            'b16e85e457397ab2043a7ee0a3c84307c6b4eac157fd0b721694761f25b3ed5b'
            'cc3d931129854c298eb22e993ec14c2ad86cc1e70a08a64496f5e06559289972'
            '8e9656934d9d7793063230d15a689e10455e6db9b9fe73afa0f294792795d8ae')
sha512sums=('c5ffb7ca56ff4eee70f06599dd84db2eb28ddadac229d4f7faf01174805923636a4ce61486bdf5a47910c929613dc9b9290dfc9288006222b4bc4ac891548bb8'
            '184dd232db5b4a346e9751e58ad0a9b2f60d50d1a2aa2050415d288445606d80c239745f0d8987ff822d2acf6826104a81f8e59c8f1785095d1f319c0fe4abf0'
            '4b5bed0813f22af9e158ea9aa56a4a9862dd786ba2d201f20159ccf652da6190164aaed0b6b7217d578f7b25c33a8adcc307bfcf3caa8d173a7ff29e2a00fee7'
            'fe091d289d876f45319c898f6021ef86d6a238b540c225a279c46efc5c36fa7d868cd0cee73a111811c4be90df160f85340bb251be3a437727dbe5c699950363'
            'a02ad0d66f300160911aeb81d8886c6c558436ac4ee3fcd161dd65c6b1e5d1f41b9005a7f5bb5ba68d57027fc1c8e43daabf055bd6207fb5a216a67f758df8d1')

prepare() {
  (cd vim-${pkgver}/src
    patch -Np2 -i ../../fix-perl-build.patch
    # define the place for the global (g)vimrc file (set to /etc/vimrc)
    sed -E 's|^.*(#define SYS_.*VIMRC_FILE.*").*$|\1|g' -i feature.h
    sed -E 's|^.*(#define VIMRC_FILE.*").*$|\1|g' -i feature.h
    autoconf
  )
  cp -a vim-${pkgver} gvim-${pkgver}
}

build() {
  echo "Building vim..."
  (cd vim-${pkgver}
    ./configure \
      --prefix=/usr \
      --localstatedir=/var/lib/vim \
      --with-features=huge \
      --with-compiledby='Arch Linux' \
      --enable-gpm \
      --enable-acl \
      --with-x=yes \ # 这里改为yes
      --disable-gui \
      --enable-multibyte \
      --enable-cscope \
      --enable-netbeans \
      --enable-perlinterp=dynamic \
      --enable-python3interp=dynamic \
      --enable-rubyinterp=dynamic \
      --enable-luainterp=dynamic \
      --enable-tclinterp=dynamic \
      --disable-canberra
    make
  )
}

check() {
  cd vim-${pkgver}
  TERM=xterm make -j1 test
}

package_vim-runtime() {
  pkgdesc+=' (shared runtime)'
  optdepends=('sh: support for some tools and macros'
              'python: demoserver example tool'
              'gawk: mve tools upport')
  backup=('etc/vimrc')

  cd vim-${pkgver}

  make -j1 VIMRCLOC=/etc DESTDIR="${pkgdir}" install
  # man and bin files belong to 'vim'
  rm -r "${pkgdir}"/usr/share/man/ "${pkgdir}"/usr/bin/

  # Don't forget logtalk.dict
  install -Dm 644 runtime/ftplugin/logtalk.dict \
    "${pkgdir}"/usr/share/vim/vim${_versiondir}/ftplugin/logtalk.dict

  # rc files
  install -Dm 644 "${srcdir}"/vimrc "${pkgdir}"/etc/vimrc
  install -Dm 644 "${srcdir}"/archlinux.vim \
    "${pkgdir}"/usr/share/vim/vimfiles/archlinux.vim

  # no desktop files and icons
  rm -r "${pkgdir}"/usr/share/{applications,icons}

  # license
  install -dm 755 "${pkgdir}"/usr/share/licenses/vim-runtime
  ln -s /usr/share/vim/vim${_versiondir}/doc/uganda.txt \
    "${pkgdir}"/usr/share/licenses/vim-runtime/license.txt

  # pacman hook for documentation helptags
  install -Dm 644 "${srcdir}"/vimdoc.hook "${pkgdir}"/usr/share/libalpm/hooks/vimdoc.hook
}

package_vim() {
  # TODO: move perl back into optdeps after --enable-perlinterp=dynamic
  #       starts working again (https://github.com/vim/vim/issues/10512)
  depends=("vim-runtime=${pkgver}-${pkgrel}" 'gpm' 'acl' 'glibc' 'libgcrypt' 'zlib' 'perl')
  optdepends=('python: Python language support'
              'ruby: Ruby language support'
              'lua: Lua language support'
              #'perl: Perl language support'
              'tcl: Tcl language support')
  conflicts=('gvim' 'vim-minimal')
  provides=('xxd' 'vim-minimal' 'vim-plugin-runtime')
  replaces=('vim-minimal')

  cd vim-${pkgver}
  make -j1 VIMRCLOC=/etc DESTDIR="${pkgdir}" install

  # provided by (n)vi in core
  rm "${pkgdir}"/usr/bin/{ex,view}

  # delete some manpages
  find "${pkgdir}"/usr/share/man -type d -name 'man1' 2>/dev/null | \
    while read _mandir; do
    cd "${_mandir}"
    rm -f ex.1 view.1 # provided by (n)vi
    rm -f evim.1    # this does not make sense if we have no GUI
  done

  # Runtime provided by runtime package
  rm -r "${pkgdir}"/usr/share/vim

  # remove gvim.desktop as not included
  rm "${pkgdir}"/usr/share/applications/gvim.desktop

  # license
  install -Dm 644 runtime/doc/uganda.txt \
    "${pkgdir}"/usr/share/licenses/${pkgname}/license.txt
}
# vim: ts=2 sw=2 et:

</details>

iii. 构建并安装:

makepkg -si

4. 源码安装

  1. 安装依赖
sudo pacman -S glibc libgcrypt gpm python ruby libxt gtk3 lua gawk tcl zlib gettext pkgconfig
# 需要音频支持的,安装这个依赖
sudo pacman -S libcanberra
  1. 克隆源码
git clone https://github.com/vim/vim.git
  1. 配置
./configure --prefix=/usr --localstatedir=/var/lib/vim \
        --with-features=huge --enable-gpm --enable-acl --with-x=yes \
        --disable-gui --enable-multibyte --enable-cscope \
        --disable-netbeans --enable-perlinterp=dynamic \
        --enable-python3interp=dynamic --enable-rubyinterp=dynamic \
        --enable-luainterp=dynamic --mandir=/usr/share/man
        #################### 需要音频支持的加入以下配置:
        --enable--canberra
  1. 编译生成
# 默认生成
make

# 测试
make test

# 添加额外配置
make reconfig

# 测试
make test

# 安装
sudo make install

5. 测试

查看 patch 版本及是否包含 clipboard 特性

$ vim --version | grep patch
Included patches: 1-1683

$ vim --version | grep clipboard
+clipboard         +keymap            +printer           +vertsplit
+eval              -mouse_jsbterm     -sun_workshop      +xterm_clipboard

6. 参考链接

https://github.com/vim/vim

https://github.com/ycm-core/YouCompleteMe/wiki/Building-Vim-from-source

https://gitlab.archlinux.org/archlinux/packaging/packages/vim/-/blob/main/PKGBUILD

树莓派配置旁路由过程记录

2023-08-05 07:12:03

引言

树莓派是一款功能强大的微型计算机,广泛应用于物联网、嵌入式系统等领域。除了作为单独的计算设备使用外,树莓派还可以通过配置为旁路由,实现局域网内的网络管理和控制。

又翻出来一台吃灰的树莓派,不知道做什么了,想试着做做旁路由,感受一下不一样的上网体验~。

准备工作

在开始配置旁路由之前,你需要准备以下材料和环境:

  • 一台树莓派(我用的是树莓派 4B)
  • 一张 SD 卡(越大越好)
  • 一根网线
  • 一台电脑(用于配置树莓派)
  • 一个可用的无线网络

烧录固件

  1. 下载固件:我使用的是开源版的immortalwrt,从以下地址下载自编译的 openwrt 的固件: https://downloads.immortalwrt.org/releases/21.02.6/targets/bcm27xx/bcm2711/immortalwrt-21.02.6-bcm27xx-bcm2711-rpi-4-ext4-factory.img.gz

image

  1. 烧录固件:使用烧录工具将固件写入 SD 卡,推荐使用balenaEtcher(UI 美观)或者 rufus(轻量简洁),二者均开源免费。

连接树莓派

有两种方式连接树莓派:

  1. 使用电脑打开默认 UI 网页:http://192.168.1.1, 默认账户为:root,密码为:password,登陆后建议修改默认账户密码(有提示指引)。
  2. 通过 SSH 进入,ssh [email protected]连接到树莓派命令行终端。

修改 LAN 口参数

为了实现旁路由的功能,我们需要把树莓派的 LAN 口的 IP 地址改为静态地址。对于静态 IP 的选择,我们需要知道上级路由器的 IP 子网,这个可以登录到路由器后台查看,或者查看连接到路由器的其他设备(如手机)的 IP 地址。 我的上级路由器 IP 为:192.168.0.1,那么子网范围就是 192.168.0.[1~255],我们可以任意设置一个 2-255 的 IP,但是前提是该 IP 未被分配出去,你可以通过pingIP 来查看是否存在,如果提示Destination host unreachable.,说明该 IP 不存在,可以使用。当然,你也可以使用其他 IP 扫描工具来测试。

这里我们使用 192.168.0.123 作为树莓派的静态 IP 地址。


<details> <summary>更简单的配置方法</summary>

配置完之后,动了动脑子,感觉这两步可以何在一起直接在配置文件中修改,或者在 OpenWrt 控制台的网络->接口->LAN中修改。虽然我没试过(累了不想动了),但是我验证了配置文件,我觉得没毛病。

🚨 以下均为合理推测 xD🚨

<details> <summary>方法1:直接修改网络配置文件</summary> 网络配置文件位于/etc/config/network路径下,可以使用文本编辑器(如vi或nano)进行编辑。

首先,使用以下命令进入网络配置文件:

vi /etc/config/network

然后,更改 LAN 接口的 IP 地址,你可以在配置文件中找到以下行:

config interface 'lan'
        option ipaddr '192.168.1.1'

config interface 'lan'的值更改为我们需要的配置参数

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ipaddr '192.168.0.123'
        option gateway '192.168.0.1'
        option broadcast '192.168.0.255'
        option dns '192.168.0.1'

保存并退出文件。

接下来,重新启动网络服务以使更改生效:

/etc/init.d/network restart

</details> <br/> <details> <summary>方法2:直接在OpenWrt控制界面修改</summary>

修改设置参数如下: image

</details>

</details>


以下我配置的时候,参考的方法:

修改 IP 地址

如果你是使用网页连接的树莓派,可以从系统->TTYD终端页面进入树莓派的命令行。

在命令行终端输入一下命令:

uci set network.lan.ipaddr=192.168.0.123
uci commit network
/etc/init.d/network restart

修改网关及 DNS

修改好 IP 地址之后,我们需要修改一些其他的 IP 参数来保证网络的正常运行。

断开并重连电脑与树莓派的连接,如果搜不到树莓派的 WiFi 网络,树莓派重启一下应该就好了(我配置的时候用的 win10,断开之后就检测不到了,重启下就好了,不知道是我的原因还是系统原因。。。)。

浏览器打开 OpenWrt 的界面(http://192.168.0.123),输入默认账户root,密码password,进入web界面后,先根据指引修改登录的账户密码。

首先,进入网络->接口页面,选中修改LAN接口:

传输协议:静态地址

IPV4 地址:192.168.0.123

IPV4 子网掩码: 255.255.255.0

IPV4 网关:192.168.0.1 (上级路由IP)

IPV4 广播:192.168.0.255 (把上级路由 IP 最后一段改为 255)

DNS 地址:192.168.0.1

然后,勾选下方基本设置中的忽略此接口

<details> <summary>查看图片说明</summary>

image

</details>

最后,点击保存&应用

到这一步,树莓派的内部配置基本已经完成,接下来我们断开电脑与树莓派的连接,将树莓派的网口接入上级路由器的 LAN 口即可,为了保证正常工作,可以手动重启一下树莓派。

客户端配置

然后是客户端的配置,对于每一个需要使用旁路由的设备,我们都需要修改为静态 IP 地址,分配一个路由器子网内的 IP 即可,以上文 IP 网段为例,我们可以使用192.168.0.199

我们以设置 Windows11 连接到旁路由为例,

IPV4 地址:192.168.0.199

IPV4 子网掩码: 255.255.255.0

IPV4 网关:192.168.0.123 (树莓派IP)

DNS 服务器:192.168.0.123 (树莓派IP)

<details> <summary>查看配置图片说明</summary>

Win 11

image

</details>

设置保存之后,我们来验证一下是否成功,打开cmd输入ipconfig,查看 WiFi 网卡的基本信息,如果输入类似以下内容,代表静态 IP 配置成功:

Wireless LAN adapter Wi-Fi:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::687b:87f3:b17b:5c1%19
   IPv4 Address. . . . . . . . . . . : 192.168.0.199
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.0.123  #主要是这里

以防万一,我们打开浏览器,访问一个网站,如果能够正常打开,说明配置成功。


以上,使用树莓派作为旁路由的基本流程就结束了,之后你可以根据自己的需求去定制各种功能,当然,我使用的这个immoralwrt,里面已经内置了很多功能(有魔法,dddd),你可以自由开启关闭。

版本不同可能初始项不同,但是都可以在软件包(系统->软件包)中/手动下载安装.

<details> <summary>├── 状态</summary> │ ├── 概况<br/> │ ├── 防火墙<br/> │ ├── 路由表<br/> │ ├── 系统日志<br/> │ ├── 内核日志<br/> │ ├── 系统进程<br/> │ ├── 实时信息<br/> │ ├── 实时监控<br/> │ ├── WireGuard 状态<br/> │ ├── Online User<br/> │ ├── 负载均衡<br/> │ └── 释放内存<br/> </details> <br/> <details> <summary>├── 系统</summary> │ ├── Web 管理<br/> │ ├── 系统<br/> │ ├── 管理权<br/> │ ├── 软件包<br/> │ ├── TTYD 终端<br/> │ ├── 启动项<br/> │ ├── 计划任务<br/> │ ├── 挂载点<br/> │ ├── 磁盘管理<br/> │ ├── LED 配置<br/> │ ├── 备份 / 升级<br/> │ ├── 自定义命令<br/> │ ├── 定时重启<br/> │ ├── 文件传输<br/> │ ├── Argon 主题设置<br/> │ └── 重启<br/> </details> <br/> <details> <summary>├── 服务</summary> │ ├── PassWall<br/> │ ├── AdGuard Home<br/> │ ├── 上网时间控制<br/> │ ├── 微信推送<br/> │ ├── Adblock<br/> │ ├── OpenClash<br/> │ ├── 动态 DNS<br/> │ ├── WiFi 计划<br/> │ ├── SmartDNS<br/> │ ├── WatchCat<br/> │ ├── 网络唤醒<br/> │ ├── Tinyproxy<br/> │ ├── UPnP<br/> │ ├── KMS 服务器<br/> │ ├── Shairplay<br/> │ ├── Frps<br/> │ ├── Nps 内网穿透<br/> │ ├── Frp 内网穿透<br/> </details> <br/> <details> <summary>├── 网络存储</summary> │ ├── 文件助手<br/> │ ├── 文件浏览器<br/> │ ├── NFS 管理<br/> │ ├── 储存同步<br/> │ ├── FTP 服务器<br/> │ ├── 网络共享<br/> │ ├── Aria2 配置<br/> │ ├── Transmission<br/> │ ├── PCHiFi 数字转盘遥控<br/> │ ├── 挂载 SMB 网络共享<br/> │ ├── MJPG-streamer<br/> │ ├── Rclone<br/> │ └── BaiduPCS Web<br/> </details> <br/> <details> <summary>├── VPN</summary> │ ├── PPTP VPN 服务器<br/> │ ├── IPSec VPN 服务器<br/> │ ├── OpenVPN 服务器<br/> │ └── ZeroTier<br/> </details> <br/> <details> <summary>├── 网络</summary> │ ├── 接口<br/> │ ├── 无线<br/> │ ├── 访客网络<br/> │ ├── DHCP/DNS<br/> │ ├── 主机名<br/> │ ├── IP/MAC 绑定<br/> │ ├── 静态路由<br/> │ ├── 防火墙<br/> │ ├── 诊断<br/> │ ├── SQM QoS<br/> │ ├── UDP 工具<br/> │ ├── Socat<br/> │ ├── 负载均衡<br/> │ └── Turbo ACC 网络加速<br/> </details> <br/> <details> <summary>├── 带宽监控</summary> │ ├── 显示<br/> │ ├── 配置<br/> │ ├── 备份<br/> │ └── 实时流量监测<br/> </details>

└── 退出

参考资料

https://doc.openwrt.cc

https://github.com/immortalwrt/immortalwrt

https://github.com/SuLingGG/OpenWrt-Rpi/wiki

https://linux-command-list.vercel.app

配置 openclash

这里记录一下一些 openclash 配置项。

插件配置

带星号标红的是必须要确认的项,其他基本保持默认即可,也可根据自己的需求更改。

  • 模式设置:运行模式建议使用Fake-IP增强模式,性能更好。
  • 流量控制:可以勾选实验性:绕过中国大陆 IP
  • DNS 设置:本地 dns 劫持选择使用dnsmasq转发
  • 流媒体增强:根据个人需求配置,我没需求所以没改。
  • 黑白名单:根据个人需求配置,我没需求所以没改。
  • 外部控制:clash 的 UI 面板,设置一下登录密码就行。
  • IPv6 设置:根据个人需求配置,我没需求所以没改。
  • 第三方规则订阅:使用了内置的第三方规则集的,可以配置一下自动更新。
  • GEO 数据库订阅:GEO 数据库的订阅及自动更新
  • 大陆白名单订阅:配置白名单列表订阅及自动更新
  • 定时重启:设置定时重启
  • 版本更新:更新内核的界面,使用 meta 内核首次设置需要下载安装
  • 开发者选项:大佬专属界面,不知道做什么的,之后有机会研究一下
  • 调试日志:debug 时候用

顺便分享一下我的配置,也防止我自己时间久了就忘记了:

<details> <summary>🔔多图预警</summary>

<details> <summary>插件设置</summary>

模式设置

流量控制

DNS设置

版本更新

</details> <br/> <details> <summary>覆写设置</summary>

DNS设置

meta设置

规则设置

第三方规则集

</details> <br/> <details> <summary>规则附加</summary>

规则附加

</details> </details>

Cloudflare Tunnel 不完全上手指南

2023-04-01 21:04:52

最近在树莓派上整了几个 web 服务,不过只能在本地使用,无法通过外网访问,所以试着使用 Cloudflare Tunnel 来进行内网穿透,这里记录下我的操作过程。

我的硬件配置

树莓派 4B+Ubuntu 系统

安装 cloudflared

要在 Raspberry Pi 上设置 Cloudflare 隧道,我们将依赖一个名为“ Cloudflared ”的软件,Cloudflared 是在 本地网络 和 Cloudflare 网络之间创建和维护安全隧道的软件。有两种安装方法。

方法 1:使用 Cloudflare 存储库

  1. 获取 Cloudflared 存储库的 GPG 密钥
curl -L https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-archive-keyring.gpg >/dev/null
  1. 将 Cloudflared 存储库添加到软件源
echo "deb [signed-by=/usr/share/keyrings/cloudflare-archive-keyring.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee  /etc/apt/sources.list.d/cloudflared.list
  1. 更新软件包缓存并安装cloudflared
sudo apt update
sudo apt install cloudflared

方法 2:直接使用官方 deb 包

使用以下在 Github 的Release界面下载最新版 deb 包,并使用dpkg进行安装:

wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb && sudo dpkg -i cloudflared-linux-arm64.deb

注意树莓派 4B 安装_arm64_版本。

配置账号

命令行执行以下命令,按照引导进行账号验证:

cloudflared tunnel login

创建隧道

执行以下命令,创建一个 tunnel:

cloudflared tunnel create <tunnel-name>

运行上面的命令后,您将看到类似于下面的消息

Tunnel credentials written to /home/pi/.cloudflared/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.

Created tunnel pimytunnel with id XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

这一步在创建 tunnel 的同时,还生成一个 tunnel 的 UUID,一个凭证文件以及一个.cfargotunnel.com 的子域名,UUID 以及凭证文件将在之后配置文件时使用,务必记住 UUID 以及凭证文件的路径(在默认路径中,后面会提到)。

也使用以下命令验证是否创建成功:

cloudflared tunnel list

详细配置隧道

配置文件的默认路径有 3 个,分别是:

  1. ~/.cloudflared
  2. /etc/cloudflared
  3. /usr/local/etc/cloudflared

这里我们使用当前用户目录,即~/.cloudflared,我们在该目录下面创建一个配置文件,命名为config.yml,并填入之前创建的 tunnel 时的生成的配置信息:

tunnel: <Tunnel-UUID>
credentials-file: /home/pi/.cloudflared/<Tunnel-UUID>.json

ingress:
        - hostname: test.example.com
          service: http://localhost:80
        - hostname: example.com
          service: https://localhost:8000
        - service: http_status:404

然后按照配置文件的格式配置自己的 web 服务的主机名和端口,每个规则一般包含hostnameservice两部分,注意最后一行的- service: http_status:404,我们可以发现没有 hostname 部分,这并不是错误,而是cloudflared的特殊规则,主要是用来匹配所有流量,是必须要有的。

这和cloudflared匹配规则有关,当 cloudflared 收到传入请求时,它会从上到下评估每个入口规则,以找到与请求匹配的规则。规则可以匹配传入请求的主机名或路径,或两者。如果所有规则都不匹配,就会匹配最后一条规则。

路由内网服务流量

使用以下命令分配一个 CNAME 记录,将流量指向您的隧道子域。

cloudflared tunnel route dns <UUID or NAME> <hostname>

# example
cloudflared tunnel route dns pi test.example.com

运行隧道

执行以下命令,将 cloudflared 连接到 Cloudflare 的网络,Cloudflared 会从默认位置检索配置文件,即 ~/.cloudflared/config.yml

cloudflared tunnel run <UUID or NAME>

如果你的配置文件不在默认路径,可以使用--config选项来运行隧道:

cloudflared tunnel --config /path/your-config-file.yaml run <UUID or NAME>

检查隧道参数

至此,隧道配置完成,可以执行下面的命令来获得刚刚创建的隧道的信息:

cloudflared tunnel info

其他一些常用的命令:

Functions Commands
创建隧道 cloudflared tunnel run <NAME>
隧道列表 cloudflared tunnel list
停止隧道 cloudflared tunnel stop <NAME>
重新启动隧道 cloudflared tunnel restart <NAME>
删除隧道 cloudflared tunnel delete <NAME>
强制删除隧道 cloudflared tunnel delete -f <NAME>
显示隧道信息 cloudflared tunnel info <NAME>

将隧道作为服务运行

将 Tunnel 安装为系统服务,允许 Tunnel 在启动时作为启动守护进程自动运行。默认情况下,Tunnel 希望在默认目录 ~/.cloudflared/config.yml 中找到配置文件,但要将 Tunnel 作为服务运行,我们需要将 config.yml 文件移动到 ~/etc/cloudflared/ 中。

使用 mv 命令来移动配置文件

sudo mv /home/pi/.cloudflared/config.yml /etc/cloudflared/

然后执行以下命令安装服务:

sudo cloudflared service install

启动服务:

systemctl start cloudflared

检查服务运行状态:

systemctl status cloudflared

踩坑

启动隧道服务时遇到的一个问题:

failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB).

解决方法:

sudo sysctl -w net.core.rmem_max=2500000

参考

https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/

https://github.com/quic-go/quic-go/wiki/UDP-Receive-Buffer-Size

解除New Bing地区和浏览器限制的方法

2023-03-29 19:00:28

Part I:解除地区限制

最近,由于不可描述的原因,在大陆地区使用 New Bing 时会出现:"Sorry,looks like your network settings are preventing access to this feature."的问题。 image

一个比较简单的解决方案:修改请求 headerX-Forwarder-For字段的 ip 地址。

具体操作步骤如下:

  1. 设置 bing 账户的地区为大陆以外的地区,例如美国。

  2. 安装浏览器插件 Firefox: ModHeader or Header Editor Chromium Based(Edge/Chrome): ModHeader or Header Editor

  3. 查找美国 ip 段或者 ip 地址,记录一个位于的美国 ip 地址,例如:1.32.232.xxx是一个美国 ip 段,其中的xxx可以是 255 以内的任何值。

  4. 配置插件 修改请求 header 中的X-Forwarder-For字段,设置值为刚刚找到的 ip 地址1.32.232.123 设置匹配的 url 为所有bing.com的请求:.*://www.bing.com/.*

Header Editor配置示例

image

ModHeader配置示例

image

按照上面的步骤设置之后,应该就可以使用 New Bing 了。

image

Part II:解除浏览器限制

又因为各种原因,如果想要使用 New Bing,必须使用微软自家的 Edge 浏览器,虽然很强大,但是我用习惯了 Firefox,所以不想切换。但是也不想为了使用这个功能而来回切换浏览器,太麻烦了。

所以这里给出一个解决方案:更改浏览器的 UA(UserAgent)。

具体操作:

  1. 下载User-Agent Switcher and Manager插件
  2. 按照下图切换为 Edge 浏览器 UA,点击 Apply image

现在应该可以在 Firefox 使用 New Bing 了。 image

FRP上手教程

2023-03-25 18:47:15

前言

最近把在角落里吃灰的树莓派拿了出来,搭建了一个 wordpress 网站,感觉还不错,不过因为连的是家里的 WiFi,所以只能内网访问,所以就准备用内网穿透工具配置一下外网访问。之前内网穿透都是用的 Cloudflare 的 tunnel,免费,配置很简单,而且直接上自家的 CDN 网络,但是由于众所周知的原因,Cloudflare 的服务在国内访问速度感人,但是勉强还能用。不过最近在 Github 上的 Trending 里看到了这个frp,看了一下文档,发现这个工具配置起来超简单,刚好有台服务器,所以就直接上手了。

个人配置

Client: Raspberrypi 4B + Ubuntu 20.04

Server: Ubuntu 20.04

安装配置 frp

服务器端配置

下载解压 frp 文件,注意安装包的架构:

wget https://github.com/fatedier/frp/releases/download/v0.46.1/frp_0.46.1_linux_amd64.tar.gz

tar zxvf frp_0.46.1_linux_amd64.tar.gz

cd frp_0.46.1_linux_arm64/

配置流程稍稍与客户端配置不同,但是更简单,只需要编辑frps.ini配置文件,设置监听 HTTP 请求端口,这里我使用的 8080 端口:

[common]
bind_port = 7000 # frp服务的监听端口
vhost_http_port = 8080

p.s. 不要忘记开放服务器的防火墙端口。

客户端配置

下载解压 frp 文件,因为我用的是树莓派,所以下载 arm64 的包:

wget https://github.com/fatedier/frp/releases/download/v0.46.1/frp_0.46.1_linux_arm64.tar.gz

tar zxvf frp_0.46.1_linux_arm64.tar.gz

编辑frpc.ini配置文件,设置服务器的 IP 地址a.b.c.d及本地机器上 Web 服务监听的端口,并绑定自定义域名:

[common]
server_addr = a.b.c.d
server_port = 7000

[web]
type = http
local_port = 3000
custom_domains = www.yourdomain.com #这里设置域名

到这里就可以使用了,分别启动服务端和客户端即可。

# 服务端
./frps -c ./frps.ini

# 客户端
./frpc -c ./frpc.ini

通过http://www.yourdomain.com即可访问 web 服务。p.s. 不要忘记将www.yourdomain.com的域名 A 记录映射到服务器的 IP。

Caddy 配置

不过因为我的服务器上还部署了其他的 web 服务,使用了 caddy 进行反向代理,所以还需要一点额外的配置。编辑 caddy 的配置文件/etc/caddy/Caddyfile,添加新域名的反向代理:

www.yourdomain.com {
    reverse_proxy localhost:8080
}

重新启动 caddy 服务:

sudo systemctl restart caddy

现在就可以通过https://www.yourdomain.com访问内网的 web 服务了,而且 Auto HTTPS!!

参考

https://github.com/fatedier/frp/

https://gofrp.org/docs/