Mikrotik 路由接入 IPv6 网络

开启路由器 IPv6 网络 由于之前设置好了电信光猫的桥接模式,路由器是直接通过 PPPoE 协议接入电信网络,所以可以直接启用 IPv6 网络。 首先开启 MikroTik ROS 的 ipv6 包。 打开 PPPoE profile 中的 ipv6 支持。 确定 ipv6 转发开启。 配置 IPv6 DHCP Client 获取前缀。 配置 IPv6 DHCP Server 分发地址。 为内网接口分配 IPv6 地址 DNS Google 的 IPv6 公共 DNS 2001:4860:4860::8888 2001:4860:4860::8844 问题 PMTU 黑洞 接上 IPv6 后发现知乎、简书、网易云音乐等 SSL 协议连接无法访问。参考了几篇文章后发现是路由器 MTU 设置问题。 以下是引用的文章说明 [1] 终端设备在发包时,也可以设置 DF ( Don’t Fragment )标记来告诉路由器不要分片。这时中间路由器会丢掉超过 MTU 的包,回复一条 ICMP Fragmentation Needed 消息。发送者收到这个包后,下次就会发小一点的包,这个过程叫做 PMTU Discovery 。现实中可以看到 HTTPS ( TLS )的流量大都是带 DF 标记的。...

September 9, 2022 · 1 min · lyincc

C++/WinUI 3 技术笔记:(二)框架代码分析

前一节创建了一个 C++/WinUI 3 应用,接着分析默认生成的框架代码。框架代码中使用了大量 C++ 模板技术和新语言特性,发挥了 C++ 语言零开销抽象的优势,很值得学习。 App 应用入口 重新回到应用入口类 App。 struct App : AppT<App> { App(); void OnLaunched(Microsoft::UI::Xaml::LaunchActivatedEventArgs const&); private: winrt::Microsoft::UI::Xaml::Window window{ nullptr }; }; 应用的入口 App 类继承于一个代码生成的模板 AppT,这里用到的 C++ 奇异模板递归(CRTP)技术和 ATL 一脉相承。 template <typename D, typename ... Interfaces> struct AppT: public ::winrt::Microsoft::UI::Xaml::ApplicationT<D, ::winrt::Microsoft::UI::Xaml::Markup::IXamlMetadataProvider, Interfaces...> { using IXamlType = ::winrt::Microsoft::UI::Xaml::Markup::IXamlType; void InitializeComponent() { if (_contentLoaded) return; _contentLoaded = true; ::winrt::Windows::Foundation::Uri resourceLocator{ L"ms-appx:///App.xaml" }; ::winrt::Microsoft::UI::Xaml::Application::LoadComponent(*this, resourceLocator); } IXamlType GetXamlType(::winrt::Windows::UI::Xaml::Interop::TypeName const& type) { return AppProvider()->GetXamlType(type); } IXamlType GetXamlType(::winrt::hstring const& fullName) { return AppProvider()->GetXamlType(fullName); } ::winrt::com_array<::winrt::Microsoft::UI::Xaml::Markup::XmlnsDefinition> GetXmlnsDefinitions() { return AppProvider()->GetXmlnsDefinitions(); } private: bool _contentLoaded{false}; winrt::com_ptr<XamlMetaDataProvider> _appProvider; winrt::com_ptr<XamlMetaDataProvider> AppProvider() { if (!...

September 2, 2022 · 3 min · lyincc

flutter 代码生成

获取 AST builder 中对象解析是基于 analyzer 模块实现的,对于 Element 对象未封装的元数据, 可以直接通过访问其 AST 获取。 在 LibraryElement 对象中提供了 session 属性用于访问解析库的会话 AnalysisSession 对象, 这里可以查询已解析的元素语法树。 // 初始化参数从 AST 中取 final libraryResult = library.session.getParsedLibraryByElement(library) as ParsedLibraryResult; final declarationResult = libraryResult.getElementDeclaration(field); if (declarationResult != null) { final variableDeclaration = declarationResult.node as VariableDeclaration; if (variableDeclaration.initializer != null) { builder.assignment = code.Code(variableDeclaration.initializer!.toSource()); } } 在 VSCode 中调试生成器 build 库通过生成 .dart_tool/build/entrypoint/build.dart 执行代码生成,调试这个 dart 文件就可以加载自己写的生成器。 在 .vscode 的 launch.json 文件中增加 { "name": "model_gen_example model_gen", "cwd": "packages/model_gen_example", "request": "launch", "program": "....

July 4, 2022 · 1 min · lyincc

使用 WireGuard 组网

WireGuard 是一个超轻量内核级 VPN 组网工具。支持基于不对称加密的 UDP 连接组网,实现了最基础的 VPN 网络设施。 依赖 WireGuard 已经合入 Linux 内核,但是在 Linux 5.6 以上版本才有。 以树莓派中的 Archlinux 为例,安装依赖。 pacman -S linux-rpi linux-rpi-headers wireguard-dkms wireguard-tools 之后还需要加载模块 密钥交互 生成私钥 wg genkey > private 生成公钥 wg pubkey < private 手动创建 创建网络设备 ip link add wg0 type wireguard ip addr add 10.192.0.1/24 dev wg0 wg set wg0 private-key ./private ip link set wg0 up 脚本创建 有个不错的脚本。 # 生成wg1和wg2的公钥私钥配对 wg genkey | tee wg1-prikey | wg pubkey > wg1-pubkey wg genkey | tee wg2-prikey | wg pubkey > wg2-pubkey ​ # 分别赋值 WG1_PRIKEY=`cat wg1-prikey` WG1_PUBKEY=`cat wg1-pubkey` WG2_PRIKEY=`cat wg2-prikey` WG2_PUBKEY=`cat wg2-pubkey` # 此例中以wg1作为服务端,所以endpoint配置成wg1的 WG1_IP=10....

May 18, 2022 · 1 min · lyincc

frp 代理服务架设

https://github.com/fatedier/frp frp 用法很多,这里主要用做内网穿透。 内网穿透 首先需要一个中转服务器,用于公开内网服务。 中转服务器配置 [common] bind_port = 4700 服务端配置 [common] server_addr = x.x.x.x server_port = 7000 [rdp] type = stcp sk = xxx local_ip = 127.0.0.1 local_port = 3389 客户机配置 [common] server_addr = x.x.x.x server_port = 7000 [rdp_visitor] type = stcp role = visitor server_name = rdp sk = xxx bind_addr = 127.0.0.1 bind_port = 6000 Docker docker run --restart=always --network host -d -v /etc/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps docker run --restart=always --network host -d -v /etc/frp/frpc....

May 15, 2022 · 1 min · lyincc