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
后缀即可。
[root@archiso]# iwctl
[iwd]# station wlan0 connect wifi-ssid # 连接指定Wi-Fi
[iwd]# station wlan0 show # 确认是否连接成功
[iwd]# exit
/
和boot
分区mount /dev/sdaX /mnt
mount /dev/sdaY /mnt/boot
arch-chroot /mnt
pacman -S linux-zen
grub-mkconfig -o /boot/grub/grug.cfg
exit
umount -R /mnt
reboot
启动之后,就可以正常进入系统了。
这个方法和上面的类似,不过不用使用安装介质
/
分区位置ls
列出电脑上所有硬盘,输出类似:grub>ls
(hd0) (hd0, gpt1) ...... (hd1, gpt4)
/
分区,可以使用cat
/ls
命令+Tab
测试,例如:grub>ls (hd0,gpt3)/ TAB
boot usr ....
上面的输出说明(hd0,gpt3)
是 /
分区。
(hd0,gpt3)
是根分区:grub>set root=(hd0,gpt3)
grub>set prefix=(hd0,gpt3)/boot/grub
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
grub>boot
https://bbs.archlinux.org/viewtopic.php?id=274616
https://wiki.archlinux.org/title/GRUB#Using_the_command_shell
2023-08-10 16:07:52
以前在使用 Vim 编写代码的时候就发现,Vim yank 的内容无法直接进入系统剪切板,稍微 Google 了以下发现好像需要使用第三方软件(Linux 上的 xclip 或者 MacOS 上的 pbcopy),懒得折腾,就新开一个 Terminal,然后 cat 出来文件内容,拷贝需要的内容然后使用(没想到吧;D)。
最近在折腾 Vim 环境的时候,又发现了这个问题,这下不能忍了,所以索性找找有没有简单的解决方法。最后勉强找到了几个我认为比较简单的解决方法。
vim --version | grep clipboard
如果输出+clipboard
代表有剪切板特性,恭喜你,可以直接下拉进入文末;如果出现-clipboard
则说明没有,那你可以接着往下看。
直接安装 gvim,带有命令行版本的 Vim 是支持剪切板特性的。
sudo pacman -S gvim
鲁迅曾说:遇事不决,上 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
如果你对 AUR 了解比较多,可以尝试自己构建 PKGBUILD 文件。
如果不了解也没关系,我们可以直接找现成的。可以选择直接修改 Arch Linux 官方的 PKGBUILD,在这基础上加入 clipboard 功能支持。
i. 克隆官方的 Vim 包构建仓库:
git clone https://gitlab.archlinux.org/archlinux/packaging/packages/vim.git
ii. 修改PKGBUILD
文件,修改--with-x
为yes
,为了节省时间,可以去掉 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
sudo pacman -S glibc libgcrypt gpm python ruby libxt gtk3 lua gawk tcl zlib gettext pkgconfig
# 需要音频支持的,安装这个依赖
sudo pacman -S libcanberra
git clone https://github.com/vim/vim.git
./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
# 默认生成
make
# 测试
make test
# 添加额外配置
make reconfig
# 测试
make test
# 安装
sudo make install
查看 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
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
树莓派是一款功能强大的微型计算机,广泛应用于物联网、嵌入式系统等领域。除了作为单独的计算设备使用外,树莓派还可以通过配置为旁路由,实现局域网内的网络管理和控制。
又翻出来一台吃灰的树莓派,不知道做什么了,想试着做做旁路由,感受一下不一样的上网体验~。
在开始配置旁路由之前,你需要准备以下材料和环境:
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
有两种方式连接树莓派:
ssh [email protected]
连接到树莓派命令行终端。为了实现旁路由的功能,我们需要把树莓派的 LAN 口的 IP 地址改为静态地址。对于静态 IP 的选择,我们需要知道上级路由器的 IP 子网,这个可以登录到路由器后台查看,或者查看连接到路由器的其他设备(如手机)的 IP 地址。
我的上级路由器 IP 为:192.168.0.1,那么子网范围就是 192.168.0.[1~255],我们可以任意设置一个 2-255 的 IP,但是前提是该 IP 未被分配出去,你可以通过ping
IP 来查看是否存在,如果提示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>
修改设置参数如下:
</details>
</details>
以下我配置的时候,参考的方法:
如果你是使用网页连接的树莓派,可以从
系统->TTYD终端
页面进入树莓派的命令行。
在命令行终端输入一下命令:
uci set network.lan.ipaddr=192.168.0.123
uci commit network
/etc/init.d/network restart
修改好 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>
</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
</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://github.com/immortalwrt/immortalwrt
https://github.com/SuLingGG/OpenWrt-Rpi/wiki
https://linux-command-list.vercel.app
这里记录一下一些 openclash 配置项。
带星号标红的是必须要确认的项,其他基本保持默认即可,也可根据自己的需求更改。
模式设置
:运行模式建议使用Fake-IP增强模式
,性能更好。流量控制
:可以勾选实验性:绕过中国大陆 IP
DNS 设置
:本地 dns 劫持选择使用dnsmasq转发
流媒体增强
:根据个人需求配置,我没需求所以没改。黑白名单
:根据个人需求配置,我没需求所以没改。外部控制
:clash 的 UI 面板,设置一下登录密码就行。IPv6 设置
:根据个人需求配置,我没需求所以没改。第三方规则订阅
:使用了内置的第三方规则集的,可以配置一下自动更新。GEO 数据库订阅
:GEO 数据库的订阅及自动更新大陆白名单订阅
:配置白名单列表订阅及自动更新定时重启
:设置定时重启版本更新
:更新内核的界面,使用 meta 内核首次设置需要下载安装开发者选项
:大佬专属界面,不知道做什么的,之后有机会研究一下调试日志
:debug 时候用顺便分享一下我的配置,也防止我自己时间久了就忘记了:
<details> <summary>🔔多图预警</summary>
<details> <summary>插件设置</summary>
</details> <br/> <details> <summary>覆写设置</summary>
</details> <br/> <details> <summary>规则附加</summary>
</details> </details>
2023-04-01 21:04:52
最近在树莓派上整了几个 web 服务,不过只能在本地使用,无法通过外网访问,所以试着使用 Cloudflare Tunnel 来进行内网穿透,这里记录下我的操作过程。
我的硬件配置
树莓派 4B+Ubuntu 系统
要在 Raspberry Pi 上设置 Cloudflare 隧道,我们将依赖一个名为“ Cloudflared
”的软件,Cloudflared 是在 本地网络 和 Cloudflare 网络之间创建和维护安全隧道的软件。有两种安装方法。
curl -L https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-archive-keyring.gpg >/dev/null
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
cloudflared
:sudo apt update
sudo apt install cloudflared
使用以下在 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 个,分别是:
~/.cloudflared
/etc/cloudflared
/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 服务的主机名和端口,每个规则一般包含hostname
和service
两部分,注意最后一行的- 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
2023-03-29 19:00:28
最近,由于不可描述的原因,在大陆地区使用 New Bing 时会出现:"Sorry,looks like your network settings are preventing access to this feature."的问题。
一个比较简单的解决方案:修改请求 header
中X-Forwarder-For
字段的 ip 地址。
具体操作步骤如下:
设置 bing 账户的地区为大陆以外的地区,例如美国。
安装浏览器插件 Firefox: ModHeader or Header Editor Chromium Based(Edge/Chrome): ModHeader or Header Editor
查找美国 ip 段或者 ip 地址,记录一个位于的美国 ip 地址,例如:1.32.232.xxx
是一个美国 ip 段,其中的xxx
可以是 255 以内的任何值。
配置插件
修改请求 header 中的X-Forwarder-For
字段,设置值为刚刚找到的 ip 地址1.32.232.123
设置匹配的 url 为所有bing.com
的请求:.*://www.bing.com/.*
Header Editor配置示例
ModHeader配置示例
按照上面的步骤设置之后,应该就可以使用 New Bing 了。
又因为各种原因,如果想要使用 New Bing,必须使用微软自家的 Edge 浏览器,虽然很强大,但是我用习惯了 Firefox,所以不想切换。但是也不想为了使用这个功能而来回切换浏览器,太麻烦了。
所以这里给出一个解决方案:更改浏览器的 UA(UserAgent)。
具体操作:
现在应该可以在 Firefox 使用 New Bing 了。
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 文件,注意安装包的架构:
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。
不过因为我的服务器上还部署了其他的 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!!