在Windows下实现WireGuard动态DNS解析(DDNS)的正确方法:避免无意义的开销

WireGuard 隧道一旦建立后,域名就不再重新解析了,一旦服务端的 IP 发生改变,这隧道就断了。

截止文章最后修订,WireGuard 官方始终没有提供 Windows 下的动态 DNS 解析(DDNS)客户端脚本,所以说你想实现,如果你想在 Windows 下使用 WireGuard 配合经常改变 IP 的域名,你就必须要自己写一个动态 DNS 解析脚本。

我基于网上的脚本进行了一番魔改,增加了以下特性:

  • 只处理已启用的 WireGuard 隧道,没开的隧道不会处理
  • 可以作为服务安装,自带延迟功能
  • 增加各类判断条件和错误处理,以便纠错

点击阅读全文 →

校园网白嫖思路分享:局域网中转-不花钱、不认证、高速上网

本文将分享一些校园网的白嫖思路(WireGuard / SoftEther VPN Server基于 UDP 53 端口的 VPN 三层白嫖、Socks 5 白嫖+科学上网二合一的四层白嫖),也就是不花一分钱就和一般用户一样使用校园网。

2023/2/23: 更新各平台配置NAT命令和L2TP方法,并根据先前在评论区的答复介绍可以直接放弃的一些不可行的思路

前提条件

下面列出的思路均要求使用一个校园网的服务器作为中转,因此,需要能够在不需要付费、认证后就能上网的网络环境(一般为办公区或实验室网络)下放一个电脑(树莓派也行);或者有任意学校服务器的使用权。

整体思路就是找个在学校里面地方搭个服务器中转流量

各种思路

基于 UDP 53 端口的 VPN 三层白嫖

原理:UDP 53 是 DNS 协议所用端口,由于门户(Portal)认证为了实现 HTTP 劫持跳转到登录页面,必须使得浏览器能够正常地进行 DNS 解析,因此在不认证、不付费的情况下也会放行 UDP 53 端口的流量。

特点不需要校园网认证,不需要购买校园网,不需要校园网账号。此外由于 VPN 自带加密,因此可以克服开放 Wi-Fi 网络通信完全不加密的缺陷。

下面所列出的两个思路均是三层(IP)级的 VPN 方法,可以转发所有三层报文,因此支持 ICMP 协议(可以用ping)。

注意:使用 UDP 53 端口需要所在网络没有DNS劫持的问题,如果你所在的网络存在DNS劫持(例如,OpenWRT的DHCP/DNS下的”DNS重定向”功能就是DNS劫持),则该方法会失败。

实现思路1:WireGuard

我特别推荐此方案。WireGuard 是几乎无状态的VPN协议,切换网络零感知,不需要重新连接VPN,对于经常睡眠-唤醒的电脑特别有用。睡眠唤醒后可以立刻上网。此外 WireGuard 在 Linux 和 Windows 操作系统上均是纯内核态的实现,性能极其高。

方法:搭建一个 wireguard 服务端,然后端口监听在 53 上

搭建 Linux 服务端的教程很多,一键包也很多。但若要搭建 Windows 服务端,请一定要阅读我之前的这篇文章

缺点:搭建确实有些复杂,另外配置文件对于不懂计算机网络的人来说实在是晦涩难懂

点击阅读全文 →

在 Windows 上配置网卡多个 VLAN、多个虚拟网卡、实现单线多拨网速叠加(无需驱动支持)

本文分为两节,分别是如何在 Windows 上利用 Hyper-V 交换机实现对 VLAN 的支持;以及如何利用 Hyper-V 交换机功能创建多块虚拟网卡,实现单线多拨叠加网速。可以只使用 Hyper-V 交换机而不使用 Hyper-V 虚拟机,所以这不会影响你电脑的性能。以上功能均不需要网卡驱动支持。

效果图:

ℹ️ 使用 Hyper-V 功能需要 Windows 10 专业版 或以上版本,如果你使用的是家庭版,可以通过断网更改产品密钥、再通过KMS服务器激活的方式原地升级到专业版。

点击阅读全文 →

在 VMware Workstation 桥接模式的网卡上让虚拟机使用 VLAN 的正确方法

要解决的问题

有一个虚拟机运行在 VMWare workstation 中,如何让这个虚拟机桥接到宿主机的网络上的某个 VLAN?

常见使用场景

只有一个网口的单臂软路由,同时宿主机为 Windows,虚拟机软件为 VMware Workstation,在虚拟机中运行 OpenWrt

需要在一个网口上,利用 VLAN 实现虚拟 WAN 口上的 PPPoE 拨号和 虚拟 LAN 口上的上网服务。

方法

  1. 根据宿主机网卡的品牌,下载对应的 VLAN 设置软件。已知 Realtek 和 Intel 网卡都提供这样的软件。Realtek 网卡的软件为 Realtek Ethernet Diagnostic Utility
  2. 下文以 Realtek 网卡为例。如果你的网卡厂商不提供 VLAN 设置软件,请直接转到文末
  3. 在宿主机上设置你想要使用的 VLAN 编号,软件将会创建一个虚拟网卡。记住网卡名称和适配器名称

点击阅读全文 →

在 Windows 上设置 NAT 或网络共享的正确方法——避免Wi-Fi热点无法使用

最近在我的笔记本上用 WireGuardServerForWindows 项目搭了一个 WireGuard 服务端,但是发现一个问题,我一给 WireGuard 开网络共享,我就没法开 Wi-Fi 热点了

罪魁祸首:SharedAccess

目前的NAT的普遍做法是用 SharedAccess 服务,也就是你在控制面板看到的那个 “Internet 连接共享”

但是这个服务是针对热点的设计的,只能支持一个 NAT 实例,这意味着,由于SharedAccess服务已经被wireguard服务器的NAT占用掉了,你就没办法建立一个有 Internet 的 Wi-Fi热点

但是,如果,使用New-NetNat命令,就能够设置许多NAT实例,同时可以用热点。

方法

点击阅读全文 →

Linux 内核结构和子系统简介

本文是对 Anatomy of the Linux kernel 的部分翻译。

操作系统是计算机技术不可或缺的组成部分,是硬件设备在应用领域的延展与扩充,能够有效规划和设计计算机的工作流程,保证资源的合理配置和科学管理,确保用户能够便捷自如地操作计算机,满足多层面的任务需要。[1]在计算机上配置操作系统,主要是为了方便用户使用;提高系统资源利用率、提高系统吞吐量;方便增添新的功能和模块;遵循世界标准规范。一个没有配置操作系统的计算机几乎是无法使用的。

自计算机产生以来,人们就开始关注操作系统的研究。本文将就目前在移动端、桌面端、服务器使用较为广泛的操作系统内核Linux展开论述。

Linux 内核简介

图 1 Linux 基本体系结构

如图所示。用户和应用程序空间位于顶部。此处执行用户应用程序。用户空间下面是内核空间。Linux内核运行在此处。

另有GNU C库(glibc)。它提供连接到内核的系统调用接口(System call
interface),并提供了在用户空间(user-space)的应用程序和内核之间转换的功能。因为内核和用户应用程序占用不同的受保护地址空间。并且,尽管每个用户空间进程都占用其自己的虚拟地址空间,但内核仅占用一个地址空间。[2]

Linux内核可以进一步分为三个级别。顶部是系统调用接口,该接口实现诸如读取和写入之类的基本功能。在系统调用接口下方的是内核代码,是与体系结构无关的内核代码。该代码是Linux支持的所有处理器体系结构的通用代码。在此之下是与体系结构相关的代码,该代码通常称为BSP(Board
Support Package,
板级支持包)。该代码用作特定体系结构的处理器和特定平台的代码。

Linux内核分为许多不同的子系统。
Linux也可以看作是一个整体,因为它将所有基本服务集中到内核中(宏内核)。这与微内核体系结构不同,在微体系结构中,内核提供基本服务,例如通信,I/O,内存和进程管理,而更具体的服务则进入微内核层。

随着Linux的发展,Linux内核在内存和CPU使用率方面日渐高效,并且非常稳定。Linux最值得称道的方面是它的可移植性。可以将Linux编译为可在具有不同体系结构约束和需求的大量处理器和平台上运行。例如,许多家用路由器(例如小米、华硕、斐讯)都运行基于Linux的OpenWRT的厂商定制版。

Linux 主要子系统

操作系统的主要功能包括处理机管理、存储器管理、设备管理、文件管理、用户接口。处理机管理包括进程控制、进程同步、进程通信、调度。存储器管理包括内存分配、内存保护、地址映射、内存扩充。设备管理包括缓冲管理、设备分配、设备处理。文件管理:文件存储空间管理、目录管理、文件的读写管理和保护。用户接口包括联机用户接口、脱机用户接口、图形用户接口。[3]这正是Linux的主要子系统。

图 2 Linux的主要子系统

处理机管理: Linux 进程调度

进程(Process)调度负责进程的执行和管理。在内核中,这些进程称为”线程”,代表对处理器的一个虚拟化(virtualization)。。在用户空间中,虽然Linux并未将两个概念(进程和线程)分开,但我们仍然通常使用术语”进程(Process)”。内核通过SCI提供了一个应用程序接口(API)来创建新进程(fork,exec或其他
POSIX
函数),停止进程(强制结束(kill),退出(exit))以及在它们之间进行通信和同步(信号(signal)或其他POSIX机制)。此API通常被init程序(现在通常为systemd)调用来创建新进程。

在进程管理中,还需要在活动线程之间共享CPU。Linux内核实现了一种新颖的调度算法,该算法可在常数时间执行,而与争用CPU的线程数量无关。称为O(1)调度程序(O(1)
scheduler),表示调度一个线程和调度多个线程所花费的时间相同。O(1)调度程序还支持多个处理器(称为SMP(对称多处理))。

存储器管理: Linux 内存管理

内核管理的另一个重要事项是内存。为了提高效率,考虑到硬件管理虚拟内存的方式,内存以”页面”(对于大多数CPU体系结构,页大小为4KB)进行管理。
Linux存储器管理包括管理可用内存的方法,以及用于物理和虚拟内存映射的硬件机制。

但是内存管理不仅仅是管理4KB缓冲区。Linux还提供了4KB缓冲区(例如slab分配器)上的抽象。该内存管理方案使用4KB缓冲区作为基础,然后从内部分配结构,跟踪哪些页已满、哪些只使用了一部分、哪些为空。该方案能够根据更大系统的需求动态增长和收缩。

Linux支持多个内存”用户”,物理内存经常会耗尽。为了解决此问题,可以将页面移出内存并移至磁盘上。此过程称为交换(swapping),因为页面是从内存交换到硬盘上的。

文件管理: 虚拟文件系统(VFS)

图 3 VFS

虚拟文件系统(VFS)为文件系统提供了通用的接口抽象。
VFS在SCI和内核支持的文件系统之间提供了一个交换层(图3)。

VFS的顶部是通用的API的抽象,例如打开,关闭,读取和写入。
VFS的底部是文件系统的抽象,定义了如何实现上层功能。这些是给定文件系统的插件(内核有50个以上)。

文件系统层下面是缓冲区高速缓存,它为文件系统层提供了一组通用功能(独立于任何特定文件系统)。该缓存层通过将数据保留很短的时间(或预先推测性读取,以便在需要时可以使用数据)来优化对物理设备的访问。缓冲区高速缓存下方是设备驱动程序,这些驱动程序实现了特定物理设备的接口。

用户接口: 系统调用接口(SCI)

SCI是一个相当简单的”层”,提供了从用户空间到内核执行函数调用的方法。如前所述,即使在同一系列的处理器中,此接口也可能依赖于CPU体系结构。
SCI实际上是一种调用复用和解复用服务。

系统调用接口是为函数调用服务是一种特殊机制,主要完成从客户到内核数据的调用,并将源码储存起来。客户能够对进程进行控制,主要运用调用接口来实现,在各进程中能够完成实时通信。通信机制有多种,常使用的如signal等。

Linux 网络栈

Linux网络栈遵循根据协议本身建模的分层体系结构,例如OSI模型。在Linux网络栈中,IP协议仍是位于传输层(如TCP)之下的核心网络层协议。TCP之上是套接字(Socket)层,它是通过SCI调用的。

套接字(Socket)层是网络子系统的标准API,并为各种网络协议提供用户界面。包括原始IP协议数据单元(PDU)、TCP、UDP,套接字层提供了一套标准方法来管理连接并在端口之间传输数据。