FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章
  • 书籍
  • FreeBSD 网络文章集锦
  • 2025 年
    • zfs 速查手册
    • FreeBSD 开发计划
    • 谁在使用 FreeBSD(基金会官方版本)
    • FreeBSD 特色开发项目
    • 如何将基于 Electron 的应用程序移植到 FreeBSD
    • FreeBSD:原始操作系统发行版的火炬传承者
    • 浏览 FreeBSD 新的季度和两年一次发布计划
    • FreeBSD 日专访 BSD 守护神 Beastie
  • 2024 年 11 月
    • 苹果的开源基石:macOS 和 iOS 背后的 BSD 传统
    • 在动荡的开源世界中保持稳定:FreeBSD 的持久稳定性
    • 为什么你应该使用 FreeBSD
    • FreeBSD 13.4: 新特性及其发展历程
    • Quantum Leap Research 和 FreeBSD 基金会将投资 75 万美元以改善笔记本电脑支持和用户体验
    • 主权科技基金将投资 68.64 万欧元用于 FreeBSD 基础设施现代化
  • 2024 年 7 月
    • BSD 老将:Michael J. Karels 逝世,享年 68 岁
    • 讣告——Michael "Mike" John Karels
    • 配置自己的 VPN——基于 OpenBSD、Wireguard、IPv6 和广告拦截
    • 如何在 FreeBSD 中指定 CPU 类型
    • 使用 BIOS 引导和 UEFI 引导的 GPT 分区的区别和制作方法
    • 通过替换 ZFS 镜像池中的磁盘来扩容
    • 通过为 ZFS 池配置镜像来消除无效数据的影响
    • FreeBSD Bhyve PCI 直通
    • ZFS 池破坏实验
    • FreeBSD ports 开发技术研究
    • FreeBSD pkg 命令概述
    • portsnap 被淘汰了,本应由 git 代替,但结果我发现自己用的是 got
    • ccache 在构建 FreeBSD 的 buildworld 时的效率
    • Hyper-V FreeBSD 13 安装感想
    • 关于对 FreeBSD 发布计划和生命周期的修订
  • 2023 年 12 月
    • FreeBSD 新手?来参与社区吧
    • 介绍来 FreeBSD 的学生
    • EuroBSDCon 2023 旅行报告——Bojan Novković
    • 什么是开发播客?FreeBSD 项目的演变
    • EuroBSDCon 2023 旅行报告——Mark Johnston
    • TalkDev:探索开源的未来
    • 为什么选择 FreeBSD?Metify 展示迁移到 FreeBSD 如何对两个新产品进行增强
    • FreeBSD 基金会宣布通过 SSDF 认证
    • 2023 年全球开放大会报告
    • FreeBSD v14:恪守类 Unix 操作系统传统,提升安全性与性能
  • 2023 年 9 月
    • 认识 2023 年参与 FreeBSD 谷歌编程之夏项目的学生:Soobin Rho
    • 认识 2023 年参与 FreeBSD 谷歌编程之夏项目的学生:Aymeric Wibo
    • FreeBSD 企业工作组首次会议总结
    • OpenBSD 路由器指南
    • 认识 2023 年 FreeBSD 谷歌编程之夏的学生:Sudhanshu Mohan Kashyap
    • 认识 2023 年夏季滑铁卢大学合作学生:Naman Sood
    • FreeBSD 基金会 2023 年暑期实习生:Jake Freeland
    • 第二次企业工作组会议回顾
    • OpenBSD 与 FreeBSD:有何不同,哪个更好?
  • 2023 年 9 月以前
    • 参与宣传:2023 年 5 月的 FreeBSD 开发者峰会和 BSDCan
    • 恭喜 FreeBSD 迎来 30 周年!为什么开源项目 FreeBSD 能够持续存在
    • 庆祝 FreeBSD 成立 30 周年:许可证
    • 聚集在开放领域工作的公益和慈善基金会
    • 在 Linode 上安装 pfSense
    • 在 FreeBSD 的 jail 中安装 NextCloud
    • 将 FreeBSD 上的 Ansible 主机和客户机都安装在 Jail 中
    • FreeBSD 简介 | BSD.pw 研讨会
    • 如何在 FreeBSD 上安装 Python
    • 升级到 FreeBSD 13.2 的十大理由
    • 采访 FreeBSD 基金会执行董事 Deb Goodkin
    • 我们使用开源的 FreeBSD 作为企业操作系统的 5 个原因
    • 关于 BSD 与 Linux 的典型讨论
    • OpenBSD 太棒了
    • systemd 背后的真正动机
    • systemd 在任何地方都不安全
    • 为什么你应该将所有东西从 Linux 迁移到 BSD
    • 如何在 FreeBSD 上设置一个简单且实际工作的 WireGuard 服务器
    • 选择 FreeBSD 而非 GNU/Linux 的技术性原因
    • GPL 之殇
    • FreeBSD 与研究社区
    • 在 OpenBSD 和 FreeBSD 之间选择的区别
    • FreeBSD 是一个令人惊叹的操作系统
    • 留意日期:2023 年 11 月的自由软件组织厂商峰会
    • JENNY 日常使用的系统:FreeBSD 13.2
    • FreeBSD Ports 中的 OPTIONS 功能介绍——使用 OPTIONS_SET/OPTIONS_UNSET/NO_DIALOG 进行操作和实践
    • FreeBSD Bhyve 上的 PCI 直通
    • 2023 年 FreebBSD 谷歌编程之夏学生介绍:Raghav Sharma
    • 2023 年 7 月软件开发项目进展报道
    • 用于研究的 FreeBSD:CHERI/Morello
    • 在 FreeBSD Jail 中使用 OpenRC 启动并运行 Devuan GNU+Linux 系统
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
在GitHub上编辑
导出为 PDF
  1. 2023 年 9 月以前

如何在 FreeBSD 上设置一个简单且实际工作的 WireGuard 服务器

上一页为什么你应该将所有东西从 Linux 迁移到 BSD下一页选择 FreeBSD 而非 GNU/Linux 的技术性原因

最后更新于1年前

  • 原链接:

  • 发布日期:2023 年 4 月 17 日

  • 译者:ykla & ChatGPT

在我努力使 WireGuard 正常运行的过程中,我碰到了许多指南和教程。但它们都缺少关键信息,或者依赖于过时的信息。通常只是微妙的指示出现了问题。当与其他潜在故障点一起出现时,这很快就会变成一个令人沮丧的打地鼠游戏,让人走入很多死胡同。

话虽如此,以下是一个最小化的设置,截止到今天,在运行 FreeBSD 13.2 的具有单个以太网连接的树莓派 3 上有效。

首先,安装所需的软件:

pkg install wireguard wireguard-tools libqrencode

开启 Wireguard 服务:

service wireguard enable
sysrc wireguard_interfaces="wg0"

启用 IP 转发并立即激活:

sysrc gateway_enable=YES
sysctl -w net.inet.ip.forwarding=1

设置防火墙和日志记录:

service pf enable
service pflog enable
# /etc/pf.conf

ext_if="ue0"
wg_net="10.10.10.0/24"
scrub in all
nat on $ext_if from $wg_net to any -> ($ext_if)
pass log all
service pf start
service pflog start

接下来生成服务器密钥:

cd /usr/local/etc/wireguard/
umask 077
wg genkey | tee /usr/local/etc/wireguard/server_private.key | wg pubkey | tee /usr/local/etc/wireguard/server_public.key

你还需要客户端密钥。这个示例假设使用 iPhone 作为名称,但对于任何客户端,流程都是相同的:

cd /usr/local/etc/wireguard/
umask 077
wg genkey | tee /usr/local/etc/wireguard/iphone_private.key | wg pubkey | tee /usr/local/etc/wireguard/iphone_public.key
wg genpsk > iphone_preshared.key

创建服务器配置:

https://herrbischoff.com/2023/04/freebsd-how-to-set-up-a-simple-and-actually-working-wireguard-server/#:~:text=%23%20/usr/local/etc/wireguard/wg0.conf%0A%0A%5BInterface%5D%0AAddress%20%3D%2010.10.10.1/32%20%23%20address%20the%20server%20will%20bind%20to%0AListenPort%20%3D%2051820%0APrivateKey%20%3D%20your%2Dprivate%2Dserver%2Dkey%2Dhere%0A%0A%5BPeer%5D%0AAllowedIPs%20%3D%2010.10.10.2/32%0APreSharedKey%20%3D%20your%2Dpreshared%2Dclient%2Dkey%0APublicKey%20%3D%20your%2Dpublic%2Dclient%2Dkey

创建客户端配置:

# /usr/local/etc/wireguard/wg_iphone.conf

[Interface]
PrivateKey = your-private-client-key
Address = 10.10.10.2/32
DNS = 9.9.9.9 # optional, useful to avoid DNS leaks

[Peer]
PublicKey = your-public-server-key
PreSharedKey = your-preshared-client-key
AllowedIPs = 0.0.0.0/0 # entire Internet
Endpoint = your-external-ip-or-host:51820
PersistentKeepalive = 30

对于额外的客户端,使用不同的文件名重复密钥生成。然后在服务器配置中添加另一个 [Peer] 部分,其中包含唯一的 IP 和客户端密钥内容。还要创建相应的客户端配置。在更改了服务器配置之后重新启动 WireGuard。

为了方便传输到 iPhone,在 WireGuard 应用程序中生成一个二维码,并通过摄像头导入:

qrencode -t ansi < wg_iphone.conf

开启 Wireguard 服务:

service wireguard start

现在,你应该能够成功地使用 iPhone 进行连接,并且能够访问你的内部网络以及互联网了。

几点注意事项:

  • 在家中进行此操作时,请不要忘记在路由器中设置端口转发。WireGuard 专门使用 UDP。

  • 可以使用本地 DNS 服务器,比如 Adguard Home。我就是这么做的。这样你就可以在任何地方实现全面的广告拦截。

  • 如果遇到问题,首先重新启动机器。如果问题仍然存在,请使用 tcpdump -n -e -i pflog0 检查连接日志。

  • 在几乎所有连接无法工作的情况下,要么你忘记设置 IP 转发,要么有其他干扰的防火墙规则,要么 NAT 规则错误。

  • 我发现握手可靠性不稳定。你可能需要多次停止和启动客户端连接才能使其正常工作。

https://herrbischoff.com/2023/04/freebsd-how-to-set-up-a-simple-and-actually-working-wireguard-server/