sing-box TUN模式透明代理

前言 你的软路由到底是用来做旁路由还是主路由?如果是旁路由的话,只用科学上网不妨试试Linux旁路由网关 docker镜像构建 原本是64位的处理器,可惜之前装的32位操作系统,所以只能从Dockerfile自己构建喽 拉源码 git clone https://github.com/SagerNet/sing-box.git 构建镜像 docker build --no-cache -t laningya/sing-box:v1 . docker-compose.yml文件 version: "3.3" services: sing-box: image: laningya/sing-box:v1 container_name: sing-box restart: always network_mode: "host" volumes: - ./conf:/etc/sing-box/ devices: - /dev/net/tun:/dev/net/tun cap_add: - ALL command: -D /var/lib/sing-box -C /etc/sing-box/ run 要开启tun模式,devices和cap_add字段非常重要 一个不错的sing-box配置模板 { "dns": { "servers": [ { "tag": "dns_proxy", "address": "https://1.1.1.1/dns-query", "address_resolver": "dns_resolver", "strategy": "ipv4_only", "detour": "select" }, { "tag": "dns_direct", "address": "h3://dns.alidns.com/dns-query", "address_resolver": "dns_resolver", "strategy": "ipv4_only", "detour": "direct" }, { "tag": "dns_block", "address": "rcode://refused" }, { "tag": "dns_resolver", "address": "223.5.5.5", "strategy": "ipv4_only", "detour": "direct" } ], "rules": [ { "outbound": "any", "server": "dns_resolver" }, { "clash_mode": "direct", "server": "dns_direct" }, { "clash_mode": "global", "server": "dns_proxy" }, { "process_name": [ "TencentMeeting", "NemoDesktop", "ToDesk", "ToDesk_Service", "WeChat", "Tailscale", "wireguard-go", "Tunnelblick", "softwareupdated", "kubectl" ], "server": "dns_direct" }, { "domain_suffix": [ "icloudnative.io", "fuckcloudnative.io", "sealos.io", "cdn.jsdelivr.net" ], "server": "dns_direct" }, { "process_name": [ "DropboxMacUpdate", "Dropbox" ], "server": "dns_proxy" }, { "package_name": [ "com.google.android.youtube", "com.android.vending", "org.telegram.messenger", "org.telegram.plus" ], "server": "dns_proxy" }, { "rule_set": "geosite-geolocation-!cn", "server": "dns_proxy" }, { "rule_set": "Global", "server": "dns_proxy" }, { "rule_set": [ "YouTube", "Telegram", "Netflix", "geoip-google", "geoip-telegram", "geoip-twitter", "geoip-netflix" ], "server": "dns_proxy" } ], "final": "dns_direct" }, "ntp": { "enabled": true, "server": "time.apple.com", "server_port": 123, "interval": "30m0s", "detour": "direct" }, "inbounds": [ { "type": "tun", "inet4_address": "198.18.0.1/16", "auto_route": true, "exclude_package": [ "cmb.pb", "cn.gov.pbc.dcep", "com.MobileTicket", "com.adguard.android", "com.ainemo.dragoon", "com.alibaba.android.rimet", "com.alicloud.databox", "com.amazing.cloudisk.tv", "com.autonavi.minimap", "com.bilibili.app.in", "com.bishua666.luxxx1", "com.cainiao.wireless", "com.chebada", "com.chinamworld.main", "com.cmbchina.ccd.pluto.cmbActivity", "com.coolapk.market", "com.ctrip.ct", "com.dianping.v1", "com.douban.frodo", "com.eg.android.AlipayGphone", "com.farplace.qingzhuo", "com.hanweb.android.zhejiang.activity", "com.leoao.fitness", "com.lucinhu.bili_you", "com.mikrotik.android.tikapp", "com.moji.mjweather", "com.motorola.cn.calendar", "com.motorola.cn.lrhealth", "com.netease.cloudmusic", "com.sankuai.meituan", "com.sina.weibo", "com.smartisan.notes", "com.sohu.inputmethod.sogou.moto", "com.sonelli.juicessh", "com.ss.android.article.news", "com.ss.android.lark", "com.ss.android.ugc.aweme", "com.tailscale.ipn", "com.taobao.idlefish", "com.taobao.taobao", "com.tencent.mm", "com.tencent.mp", "com.tencent.soter.soterserver", "com.tencent.wemeet.app", "com.tencent.weread", "com.tencent.wework", "com.ttxapps.wifiadb", "com.unionpay", "com.unnoo.quan", "com.wireguard.android", "com.xingin.xhs", "com.xunmeng.pinduoduo", "com.zui.zhealthy", "ctrip.android.view", "io.kubenav.kubenav", "org.geekbang.geekTime", "tv.danmaku.bili" ], "stack": "mixed", "sniff": true }, { "type": "socks", "tag": "socks-in", "listen": "::", "listen_port": 5353 } ], "outbounds": [ { "type": "selector", "tag": "select", "outbounds": [ "trojan-out" ], "default": "trojan-out" }, { "type": "selector", "tag": "openai", "outbounds": [ "trojan-out" ], "default": "trojan-out" }, { "type": "selector", "tag": "tiktok", "outbounds": [ "trojan-out" ], "default": "trojan-out" }, { "type": "trojan", "tag": "trojan-out", "server": "199.180.115.155", "server_port": 9443, "password": "5iFHKMrn9Ez//VKh6zChTA==", "tls": { "enabled": true, "server_name": "ss.icloudnative.io", "insecure": true, "utls": { "fingerprint": "chrome" } }, "multiplex": { "protocol": "h2mux", "max_connections": 4, "min_streams": 4 }, "transport": { "type": "grpc", "service_name": "TunService" } }, { "type": "direct", "tag": "direct" }, { "type": "block", "tag": "block" }, { "type": "dns", "tag": "dns-out" } ], "route": { "rules": [ { "protocol": "dns", "outbound": "dns-out" }, { "clash_mode": "direct", "outbound": "direct" }, { "clash_mode": "global", "outbound": "select" }, { "domain_suffix": [ "icloudnative.io", "fuckcloudnative.io", "sealos.io", "cdn.jsdelivr.net" ], "outbound": "direct" }, { "process_name": [ "TencentMeeting", "NemoDesktop", "ToDesk", "ToDesk_Service", "WeChat", "OpenLens", "Tailscale", "wireguard-go", "Tunnelblick", "softwareupdated", "kubectl" ], "outbound": "direct" }, { "protocol": "quic", "outbound": "block" }, { "inbound": "socks-in", "outbound": "select" }, { "rule_set": [ "WeChat", "Bilibili" ], "outbound": "direct" }, { "rule_set": "OpenAI", "outbound": "openai" }, { "domain_suffix": [ "openai.com", "oaistatic.com", "oaiusercontent.com" ], "outbound": "openai" }, { "package_name": "com.openai.chatgpt", "outbound": "openai" }, { "rule_set": "TikTok", "outbound": "tiktok" }, { "package_name": "com.zhiliaoapp.musically", "outbound": "tiktok" }, { "domain_suffix": [ "depay.one", "orbstack.dev" ], "outbound": "select" }, { "process_name": [ "DropboxMacUpdate", "Dropbox" ], "outbound": "select" }, { "package_name": [ "com.google.android.youtube", "com.android.vending", "org.telegram.messenger", "org.telegram.plus", "com.google.android.googlequicksearchbox", "app.rvx.android.youtube", "com.mudvod.video", "com.fox2code.mmm", "com.twitter.android" ], "outbound": "select" }, { "domain": "accounts.google.com", "domain_suffix": [ "sourceforge.net", "fhjasokiwq.com" ], "outbound": "select" }, { "domain_suffix": "cloud.sealos.io", "outbound": "direct" }, { "type": "logical", "mode": "and", "rules": [ { "rule_set": "geosite-geolocation-!cn" }, { "rule_set": "geoip-cn", "invert": true } ], "outbound": "select" }, { "rule_set": "Global", "outbound": "select" }, { "rule_set": "geoip-cn", "outbound": "direct" }, { "ip_is_private": true, "outbound": "direct" }, { "rule_set": [ "YouTube", "Telegram", "Netflix", "geoip-google", "geoip-telegram", "geoip-twitter", "geoip-netflix" ], "outbound": "select" } ], "rule_set": [ { "type": "remote", "tag": "geosite-geolocation-!cn", "format": "binary", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-geolocation-!cn.srs", "download_detour": "direct" }, { "type": "remote", "tag": "geoip-cn", "format": "binary", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_ip_rule_set/geoip-cn.srs", "download_detour": "direct" }, { "type": "remote", "tag": "geoip-google", "format": "binary", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_ip_rule_set/geoip-google.srs", "download_detour": "direct" }, { "type": "remote", "tag": "geoip-telegram", "format": "binary", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_ip_rule_set/geoip-telegram.srs", "download_detour": "direct" }, { "type": "remote", "tag": "geoip-twitter", "format": "binary", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_ip_rule_set/geoip-twitter.srs", "download_detour": "direct" }, { "type": "remote", "tag": "geoip-netflix", "format": "binary", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/CHIZI-0618/v2ray-rules-dat/release/singbox_ip_rule_set/geoip-netflix.srs", "download_detour": "direct" }, { "type": "remote", "tag": "Global", "format": "source", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/Global.json", "download_detour": "direct" }, { "type": "remote", "tag": "YouTube", "format": "source", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/YouTube.json", "download_detour": "direct" }, { "type": "remote", "tag": "OpenAI", "format": "source", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/OpenAI.json", "download_detour": "direct" }, { "type": "remote", "tag": "TikTok", "format": "source", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/TikTok.json", "download_detour": "direct" }, { "type": "remote", "tag": "Telegram", "format": "source", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/Telegram.json", "download_detour": "direct" }, { "type": "remote", "tag": "Netflix", "format": "source", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/Netflix.json", "download_detour": "direct" }, { "type": "remote", "tag": "WeChat", "format": "source", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/WeChat.json", "download_detour": "direct" }, { "type": "remote", "tag": "Bilibili", "format": "source", "url": "https://mirror.ghproxy.com/https://raw.githubusercontent.com/yangchuansheng/sing-box-geosite/main/rule/Bilibili.json", "download_detour": "direct" } ], "final": "direct", "find_process": true, "auto_detect_interface": true }, "experimental": { "cache_file": { "enabled": true }, "clash_api": { "external_controller": "0.0.0.0:9090", "external_ui": "metacubexd", "external_ui_download_url": "https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip", "external_ui_download_detour": "select", "default_mode": "rule" } } } 开启内核转发并关闭防火墙 echo 1 > /proc/sys/net/ipv4/ip_forward ufw disable 参考地址 icloudnative.io ...

April 27, 2024 · 4 min · laning

校园电信宽带自动连接脚本

项目起因 校园电信宽带一大痛点是在路由器断电后,需要手动进行身份认证。在外面遇到寝室断电或者早上赶早八,而没有连接网络,当需要远程宿舍网络时,就会很崩溃。前不久看到有人在朋友圈分享自己写的脚本,今天自己实践一下。 脚本地址 作者提供的地址:https://gist.github.com/learnerLj/e327816e735ac8f12a62d18029bb45f0 在此基础上,我修改了部分代码,更便于后续的部署实践 修改后的地址:https://github.com/laningya/UESTC-WORK/blob/master/%E8%87%AA%E5%8A%A8%E8%BF%9E%E6%8E%A5%E7%94%B5%E4%BF%A1%E7%BD%91%E7%BB%9C/autoConnectNetwork.py 先看一下脚本需要提供的信息 post_url中的IP地址 post_data中userId,password,queryString 实践过程 获取脚本需要的信息 获取post_url中的IP地址和post_data中的queryString字段 (原文图片未随备份提供:images/1.png) 如图,在电信宽带认证界面的url中,172.25.249.64即为posturl中需要的IP地址;index.jsp? 之后的所有内容为post_data中queryString需要的信息。 获取post_data中的userId和password 如图,需要打开在浏览器打开f12开发者工具,如图为Google Chrome的调试页面。点击网络,保留日志,双击InterFace.do?method=login选项,选择载荷,找到其中的userId和password字段,并填入代码中,**注意:**pasaword字段后面还有个queryString字段,在步骤1中我们也有一个相同名称的字段,而程序需要的是步骤1中的字段。 至此,我们就获取到脚本需要的所有信息,即可以运行脚本。 在树莓派等设备上部署自动执行脚本 树莓派部署自动执行脚本的形式有很多,本次采用crontab服务,在pi用户下,命令行执行以下命令 cd && mkdir .script && cd .script && touch autoConnectNetwork.py 通过vim或者nano编辑器将脚本内容添加到 autoConnectNetwork.py中 添加crontab任务,在命令行执行 crontab -e 在文件末尾添加 * * * * * /usr/bin/python /home/pi/.script/autoConnectNetwork.py > /dev/null 2>&1 & 通过Docker部署脚本 下载项目文件和Docker环境以及填写配置文件。Docker的安装方法可以参考官方文档,Docker部署文件地址为:https://github.com/laningya/UESTC-WORK/tree/master/%E8%87%AA%E5%8A%A8%E8%BF%9E%E6%8E%A5%E7%94%B5%E4%BF%A1%E7%BD%91%E7%BB%9C/Docker 需要的配置与前面一致,配置文件路径为Docker/config/config.txt,填入必要的信息。 构建镜像。如果你是Linux用户,在Docker文件夹下,命令行执行 docker build --no-cache -t laningya/uestc_auto_connect_network:v1 . 不要忘记复制后面的点 说明: build:docker构建镜像的命令 --no-cache:忽略缓存 -t:指定构建后的镜像名 (原文图片未随备份提供:images/docker_build.png) 运行镜像。还是在/Docker目录下,命令行执行 docker run -itd --restart=always --net=host --name autoConnectNetwork laningya/uestc_auto_connect_network:v1 说明: run:docker运行容器的命令 -itd:可以简单理解为在后台执行 --restart=always:容器运行出现错误时,自动尝试重启,关键参数,不能轻易取消 --net=host:指定容器网络为host模式,便于直接访问路由器 --name utoConnectNetwork 指定容器名,便于后续管理 laningya/uestc_auto_connect_network:v1 我们前面构建的镜像名称 (原文图片未随备份提供:images/docker_run_ps.png)

April 6, 2023 · 1 min · laning

ESP8266开发记录

项目材料 ESP8266-12E开发板一块 ESP8266是一款物联网WiFi芯片(MCU),常见型号有ESP-01到ESP-13等,每个型号的引脚和功能不同。 SSD1306屏幕一块 I2C接口的显示屏幕,在Github上有开源驱动的驱动程序 效果图 项目功能介绍 连接指定WIFI 通过NTP服务获取时间并在屏幕上显示 通过心知天气提供的API,获取本地实时天气并显示 开发环境及配置 ESP8266常见开发环境有Arduino IDE和ESP8266 SDK两种。项目使用Arduino IDE这一集成开发环境,优点在于Arduino IDE在安装ESP8266函数库以及串口调试都更为容易。而ESP8266 SDK是乐鑫科技提供的开发工具,需要在Linux下编译开发套件并且需要单独下载串口调试工具等软件,配置相对麻烦。 Arduino IDE配置 下载 Arduino IDE 打开软件->文件->首选项->附加开发板管理器地址,添加http://arduino.esp8266.com/stable/package_esp8266com_index.json添加完成后,点击好。 在Arduino IDE中点击工具->开发板->开发板管理器,在开发板管理器里面搜索esp8266并进行安装 在Arduino IDE的开发板菜单中找到“NodeMCU开发板”,选择ESP8266-12E 将esp8266通过数据线接入电脑,右键此电脑->管理->设备管理器->端口,查找到开发板的端口号 在Arduino IDE中点击工具->端口,选择上面的端口 通过Blink实例程序,验证是否搭建完成开发环境 点击文件->示例->Basics->Blink 点击上传按钮,等待一分钟左右,可以观察到esp8266开发板上的led闪烁证明开发环境搭建完成。 依赖的第三方库 在Arduino IDE中点击工具->管理库,添加NTP库与SSD1306库 配置项目 配置WiFi信息,用你的WiFiSSID和密码替换*** 配置心知天气相关信息,用你的私钥替换***,location替换为你所在城市,如上海为shanghai,北京为beijing等,具体可参考心知天气官方开发者文档** 注意:如果你不关心代码是的问题,至此可以直接在Arduino IDE中点击上传按钮了** WeatherNow类 class WeatherNow { public: //配置心知天气相关信息 void config(String ,String ,String ,String); //获取天气信息 void getData(); public: //天气 String text; //温度 String temperature; //体感温度 String feels_like; //气压 String pressure; //相对湿度 String humidity; //能见度 String visibility; //风向 String wind_direction; //风向角度 String wind_direction_degree; //风速 String wind_speed; //风力等级 String wind_scale; //云量 String clouds; //露点温度 String dew_point; //日期 String date; private: int getPayload(); String _url; String _payload; }; WeatherDay类 class WeatherDay { public: void config(String ,String ,String ,String); void getData(); public: String date0; String date1; String date2; String text_day0; String text_day1; String text_day2; String text_night0; String text_night1; String text_night2; String code_night0; String code_night1; String code_night2; String high0; String high1; String high2; String low0; String low1; String low2; String precip0; String precip1; String precip2; String wind_direction0; String wind_direction1; String wind_direction2; String wind_direction_degree0; String wind_direction_degree1; String wind_direction_degree2; String wind_speed0; String wind_speed1; String wind_speed2; String wind_scale0; String wind_scale1; String wind_scale2; String rainfall0; String rainfall1; String rainfall2; String humidity0; String humidity1; String humidity2; private: int getPayload(); String _url; String _payload; }; 进一步开发计划 受限于ssd1306显示内容有限,因而考虑更换屏幕,显示未来天气等信息。

April 5, 2023 · 1 min · laning

多平台挂载Webdav

webdav有什么用? 在日常工作应用中,我们常常有下面的需求场景:在公司没有完成的工作,可能需要在家继续办公,而我们需要同步在公司的工作进度,最朴素的解决方法就是用U盘进行拷贝,但如果你有webdav等文件传输工具,我们可以完全省去这个繁琐的过程。webdav通过挂载云盘服务到本地,在不同设备都开启webdav,即可实现资源共享;webdav是基于http的文本传输协议,这意味着如果你能接入互联网,就能实现文本共享;同时webdav可以跨平台挂载在本地使用,这意味着你不需要考虑从Linux到Windows对于中文编码方式而出现乱码不同的尴尬;同时,例如阿里云盘、群晖NAS、Google云盘等都提供了webdav服务,这意味着你可以像使用本地硬盘一样访问你的云盘资源。 声明:本人拥有群晖NAS,所以下文的配置等可能会以群晖NAS配置作为示例,但配置方法与其他云盘区别不大,有需求的可以作为参考。 Windows: Windows平台一直以其丰富的图像化软件,在这里我推荐一款好用的webdav客户端软件: RaiDrive 下载地址:https://www.raidrive.com/download RaiDrive提供可视化操作和中文界面,具体配置可自行摸索。 Linux: 图像化操作: 如果你是将Linux作为主力机的用户,并且安装了KDE、GNOME这类桌面环境,我们可以使用桌面环境的文档管理器在网络、其他位置这些地方选择挂载Webdav。 关于GNOME桌面,我的系统环境为ArchLinux+GNOME桌面,在挂载基于https的davs服务失败,但是挂载http的dav服务成功,出于安全考虑,我舍去了这种挂载方法。 命令行操作: 命令行需要安装davfs2工具: 安装: Ubuntu/Debian: sudo apt install davfs2 Arch/Manjaro:(pacman不提供这个工具,我们需要AUR来下载) yay -S davfs2 配置: /etc/davfs2/davfs2.conf 删掉前面的注释符号并修改为: use_locks 0 ignore_dav_header 1 /etc/davfs2/secrets 在文件末尾添加: https://damain:port/path username userpassword 说明:需要指定域名、端口、群晖NAS文件路径、用户名、密码 配置开机自动挂载: /etc/fstab 在文件末尾添加: https://damain:port/path /mnt/webdav davfs rw,user,uid=username,noauto 0 0 说明: username为系统用户名

May 20, 2022 · 1 min · laning

WireGuard配置

什么是WireGuard? WireGuard是由Jason Donenfeld等人用C语言编写的开源VPN解决方案,代码只有4000多行,Linux之父Linus Torvalds评价它是Work of art。截止2020年1月,WireGuard已经合并到Linux5.6内核中,大多数Linux版本可以做到开箱即用。 为什么是WireGuard? 就个人使用体验来说,Wireguard具有低延迟、强加密、低系统占用的特点。 需求分析? 家庭电信宽带申请到了公网IP地址,但如果在外地想访问家庭网络,或者多个无公网的计算机需要互相访问,可以考虑使用WireGuard组网。 需要什么? 一台有公网IP的服务器 其他需要组网(互相访问,但没有公网)的机器 如何开始? 关于WireGuard的配置一般的宣传都声称WireGuard具有配置简单,但就个人体验来说,WireGuard的配置过程,对新手来说并不友好,其中涉及到Linux基本操作、iptables防火墙规则、计算机网络相关等知识,这对于一些小白来说并不友好。 所以我推荐在公网服务器端用Github上的一键安装脚本: https://github.com/angristan/wireguard-install 脚本下载完成后,(root权限)首次执行需要自己配置公网的网络接口(一般为eth0)、公网IP地址(或域名)、VPN网段(默认为:10.66.66.0/24)等配置,其他配置可以保持默认即可,服务端的配置文件在/etc/wireguard/wg0.conf 再次执行脚本可以进行添加用户、移除用户、移除WireGuard等操作。添加用户操作,指定用户名和IP地址(VPN网段地址)后,会在脚本目录生成对应端的配置文件,命令行执行ls,会有名为wg0-client-username.conf配置文件,在下一步我们需要用到这个文件的内容。 在非公网端,根据操作系统的不同,可能需要安装的包不同,例如Debian系可能需要检查是否有这几个包:wireguard-tools 对于内核版本低于5.6的Linux可能还需要wireguard-dkms这个包,包依赖安装好后,使用root权限在/etc/wireguard下创建wg0.conf文件,将公网端脚本目录下的配置文件内容(wg0-client-username.conf)写入此文件。 如何进一步配置? 假设有PeerA,PeerB、PeerC三台服务器,其中PeerA为公网,B、C无公网 PeerA的/etc/wireguard/wg0.conf配置内容一般如下:(上面的脚本会自动生成,一般不需要修改!!!) [Interface] Address = 10.66.66.1/24,fd42:42:42::1/64 ListenPort = 10086 PrivateKey = PeerA私钥,脚本会自动生成 PostUp = iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ###启动wg0,防火墙操作,由脚本自动生成 PostDown = iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE ###关闭wg0时,防火墙的操作,由脚本自动生成 ### Client PeerB [Peer] PublicKey = PeerB公钥,脚本自动生成 PresharedKey = PeerB预共享密钥,脚本自动生成 AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128 ### Client PeerC [Peer] PublicKey =PeerC公钥,脚本自动生成 PresharedKey = PeerC预共享密钥,脚本自动生成 AllowedIPs = 10.66.66.3/32,fd42:42:42::3/128 PeerB的/etc/wireguard/wg0.conf配置内容一般如下:(可以在PeerA脚本的目录下wg0-client-PeerBname.conf复制过来) ...

April 19, 2022 · 2 min · laning

树莓派自编译opencv

项目介绍 OpenCV是一个基于BSD许可发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。而树莓派作为一款非常流行的开发学习平台,很多开发者的人工智能项目都基于opencv,然而,树莓派的软件源一般提供的都是opencv3.4.0这种老版本,这个项目将分享如何在树莓派上源码编译并安装指定版本的opencv。 说在前面 即便是最新的树莓派4B代(4G)版本,在一切顺利的情况下,编译安装完成本项目也大概需要5个小时以上,所以如果没有特殊要求可以考虑用清华源(其他软件源不太清楚是否有对应的软件包)直接安装opencv,关于如何换清华源不多赘述,请自行百度。换源之后,命令行依次执行 sudo apt update sudo apt install python3-opencv 1.环境配置 (建议SSH远程连接树莓派操作,省去自己输入命令的烦恼) 现在你假设已经正确更换软件源,包括apt和pip,不换源在环境配置这一步可能会花费很多没必要花费的时间 对于一些博主进行扩容的操作思路,本人并没有进行所谓的扩容,且没有出现卡死的现象,所以本教程没有扩容这一步 安装opencv环境依赖,依次执行下面命令 sudo apt update && sudo apt install -y cmake g++ wget unzip sudo apt-get install build-essential git cmake pkg-config -y sudo apt-get install libjpeg8-dev -y sudo apt-get install libtiff5-dev -y sudo apt-get install libjasper-dev -y sudo apt-get install libpng12-dev -y sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y sudo apt-get install libgtk2.0-dev -y sudo apt-get install libatlas-base-dev gfortran -y 2.下载源码并解压 (建议SSH远程连接树莓派操作,省去自己输入命令的烦恼) ...

December 3, 2021 · 1 min · laning

树莓派远程访问——向日葵解决方案

项目介绍 树莓派是一款口袋型电脑,拥有丰富的外设接口,同时不错的计算能力,完善的生态(可安装多种Linux操作系统),吸引了一大批技术爱好者加入树莓派社区。要想实现远程访问树莓派GUI界面,除了常用的VNC解决方案,在这里我推荐一个工具——向日葵,它很好地解决了在无公网IP的情况下,树莓派GUI访问的问题。 1.环境要求 Raspbain_bullseye_arm64镜像,下载链接:https://mirrors.tuna.tsinghua.edu.cn/raspberry-pi-os-images/raspios_arm64/images/raspios_arm64-2021-11-08/2021-10-30-raspios-bullseye-arm64.zip 更换Debian的软件源(注意此处必须是对应系统版本Debian的软件源,而非Raspbian的软件源),更换方法如下:(参考清华大学开源软件镜像站使用帮助) 命令行执行 sudo nano /etc/apt/sources.list 注释掉原有的软件源,即在未注释行前面加#号,并复制粘贴以下内容`` deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free 依次 ctrl+o 回车 ctrl+x 如果细心观察你会发现我们这里使用了Debian11(bullseye)的系统但是使用的是Debian10(buster)的软件源,因为树莓派向日葵客户端的.deb包依赖只有buster能解决(截止2022年5月9日),如果后续需要使用可以在安装完向日葵客户端后再次换源Debian11(bullseye) 换源方法在文尾,此处可继续执行后续步骤。 接下来命令行执行下面的命令使上述变更生效 sudo apt update 2.下载并安装向日葵客户端 通过git命令克隆.deb文件地址,命令行依次执行 ...

December 3, 2021 · 1 min · laning