技术文档收录
ASCII
Tcpdump
Linux
WireGuard 一键安装脚本 | 秋水逸冰
SSH Config 那些你所知道和不知道的事 | Deepzz's Blog
Linux 让终端走代理的几种方法
ubuntu 20.04 server 版设置静态 IP 地址 - 链滴
Linux 挂载 Windows 共享磁盘的方法 - 技术学堂
将 SMB/CIFS 网络硬盘永久的挂载到 Ubuntu 上 - 简书
linux 获取当前脚本的绝对路径 | aimuke
[Linux] Linux 使用 / dev/urandom 生成随机数 - piaohua's blog
Linux 生成随机数的多种方法 | Just Do It
Linux 的 Centos7 版本下忘记 root 或者普通用户密码怎么办?
Git 强制拉取覆盖本地
SSH 安全加固指南 - FreeBuf 网络安全行业门户
Linux 系统安全强化指南 - FreeBuf 网络安全行业门户
Linux 入侵排查 - FreeBuf 网络安全行业门户
sshd_config 配置详解 - 简书
SSH 权限详解 - SegmentFault 思否
CentOS 安装 node.js 环境 - SegmentFault 思否
如何在 CentOS 7 上安装 Node.js 和 npm | myfreax
几款 ping tcping 工具总结
OpenVpn 搭建教程 | Jesse's home
openvpn 一键安装脚本 - 那片云
OpenVPN 解决 每小时断线一次 - 爱开源
OpenVPN 路由设置 – 凤曦的小窝
OpenVPN 设置非全局代理 - 镜子的记录簿
TinyProxy 使用帮助 - 简书
Ubuntu 下使用 TinyProxy 搭建代理 HTTP 服务器_Linux_运维开发网_运维开发技术经验分享
Linux 软件包管理工具 Snap 常用命令 - 简书
linux systemd 参数详解
Systemd 入门教程:命令篇 - 阮一峰的网络日志
记一次 Linux 木马清除过程
rtty:在任何地方通过 Web 访问您的终端
02 . Ansible 高级用法 (运维开发篇)
终于搞懂了服务器为啥产生大量的 TIME_WAIT!
巧妙的 Linux 命令,再来 6 个!
77% 的 Linux 运维都不懂的内核问题,这篇全告诉你了
运维工程师必备:请收好 Linux 网络命令集锦
一份阿里员工的 Java 问题排查工具单
肝了 15000 字性能调优系列专题(JVM、MySQL、Nginx and Tomcat),看不完先收
作业调度算法(FCFS,SJF,优先级调度,时间片轮转,多级反馈队列) | The Blog Of WaiterXiaoYY
看了这篇还不会 Linux 性能分析和优化,你来打我
2019 运维技能风向标
更安全的 rm 命令,保护重要数据
求你了,别再纠结线程池大小了!
重启大法好!线上常见问题排查手册
Docker
「Docker」 - 保存镜像 - 知乎
终于可以像使用 Docker 一样丝滑地使用 Containerd 了!
私有镜像仓库选型:Harbor VS Quay - 乐金明的博客 | Robin Blog
exec 与 entrypoint 使用脚本 | Mr.Cheng
Dockerfile 中的 CMD 与 ENTRYPOINT
使用 Docker 配置 MySQL 主从数据库 - 墨天轮
Alpine vs Distroless vs Busybox – 云原生实验室 - Kubernetes|Docker|Istio|Envoy|Hugo|Golang | 云原生
再见,Docker!
Python
Pipenv:新一代Python项目环境与依赖管理工具 - 知乎
Python list 列表实现栈和队列
Python 各种排序 | Lesley's blog
Python 中使用 dateutil 模块解析时间 - SegmentFault 思否
一个小破网站,居然比 Python 官网还牛逼
Python 打包 exe 的王炸 - Nuitka
Window
批处理中分割字符串 | 网络进行时
Windows 批处理基础命令学习 - 简书
在Windows上设置WireGuard
Windows LTSC、LTSB、Server 安装 Windows Store 应用商店
中间件
Nginx 中的 Rewrite 的重定向配置与实践
RabbitMQ 的监控
RabbitMq 最全的性能调优笔记 - SegmentFault 思否
为什么不建议生产用 Redis 主从模式?
高性能消息中间件——NATS
详解:Nginx 反代实现 Kibana 登录认证功能
分布式系统关注点:仅需这一篇,吃透 “负载均衡” 妥妥的
仅需这一篇,妥妥的吃透” 负载均衡”
基于 nginx 实现上游服务器动态自动上下线——不需 reload
Nginx 学习书单整理
最常见的日志收集架构(ELK Stack)
分布式之 elk 日志架构的演进
CAT 3.0 开源发布,支持多语言客户端及多项性能提升
Kafka 如何做到 1 秒处理 1500 万条消息?
Grafana 与 Kibana
ELK 日志系统之通用应用程序日志接入方案
ELK 简易 Nginx 日志系统搭建: ElasticSearch+Kibana+Filebeat
记一次 Redis 连接池问题引发的 RST
把 Redis 当作队列来用,你好大的胆子……
Redis 最佳实践:业务层面和运维层面优化
Redis 为什么变慢了?常见延迟问题定位与分析
好饭不怕晚,扒一下 Redis 配置文件的底 Ku
rabbitmq 集群搭建以及万级并发下的性能调优
别再问我 Redis 内存满了该怎么办了
Nginx 状态监控及日志分析
数据库
SQLite全文检索
Mysql 查看用户连接数配置及每个 IP 的请求情况 - 墨天轮
防火墙-iptables
iptables 常用规则:屏蔽 IP 地址、禁用 ping、协议设置、NAT 与转发、负载平衡、自定义链
防火墙 iptables 企业防火墙之 iptables
Linux 防火墙 ufw 简介
在 Ubuntu 中用 UFW 配置防火墙
在 Ubuntu20.04 上怎样使用 UFW 配置防火墙 - 技术库存网
监控类
开箱即用的 Prometheus 告警规则集
prometheus☞搭建 | zyh
docker 部署 Prometheus 监控服务器及容器并发送告警 | chris'wang
PromQL 常用命令 | LRF 成长记
持续集成CI/CD
GitHub Actions 的应用场景 | 记录干杯
GithubActions · Mr.li's Blog
工具类
GitHub 中的开源网络广告杀手,十分钟快速提升网络性能
SSH-Auditor:一款 SHH 弱密码探测工具
别再找了,Github 热门开源富文本编辑器,最实用的都在这里了 - srcmini
我最喜欢的 CLI 工具
推荐几款 Redis 可视化工具
内网代理工具与检测方法研究
环境篇:数据同步工具 DataX
全能系统监控工具 dstat
常用 Web 安全扫描工具合集
给你一款利器!轻松生成 Nginx 配置文件
教程类
手把手教你打造高效的 Kubernetes 命令行终端
Keras 作者:给软件开发者的 33 条黄金法则
超详细的网络抓包神器 Tcpdump 使用指南
使用 fail2ban 和 FirewallD 黑名单保护你的系统
linux 下 mysql 数据库单向同步配置方法分享 (Mysql)
MySQL 快速删除大量数据(千万级别)的几种实践方案
GitHub 上的优质 Linux 开源项目,真滴牛逼!
WireGuard 教程:使用 Netmaker 来管理 WireGuard 的配置 – 云原生实验室 - Kubernetes|Docker|Istio|Envoy|Hugo|Golang | 云原生
Tailscale 基础教程:Headscale 的部署方法和使用教程 – 云原生实验室 - Kubernetes|Docker|Istio|Envoy|Hugo|Golang | 云原生
Nebula Graph 的 Ansible 实践
改进你的 Ansible 剧本的 4 行代码
Caddy 2 快速简单安装配置教程 – 高玩梁的博客
切换至 Caddy2 | 某不科学的博客
Caddy2 简明教程 - bleem
树莓派安装 OpenWrt 突破校园网限制 | Asttear's Blog
OpenVPN 路由设置 – 凤曦的小窝
个性化编译 LEDE 固件
盘点各种 Windows/Office 激活工具
[VirtualBox] 1、NAT 模式下端口映射
VirtualBox 虚拟机安装 openwrt 供本机使用
NUC 折腾笔记 - 安装 ESXi 7 - 苏洋博客
锐捷、赛尔认证 MentoHUST - Ubuntu 中文
How Do I Use A Client Certificate And Private Key From The IOS Keychain? | OpenVPN
比特记事簿: 笔记: 使用电信 TR069 内网架设 WireGuard 隧道异地组网
利用 GitHub API 获取最新 Releases 的版本号 | 这是只兔子
docsify - 生成文档网站简单使用教程 - SegmentFault 思否
【干货】Chrome 插件 (扩展) 开发全攻略 - 好记的博客
一看就会的 GitHub 骚操作,让你看上去像一位开源大佬
【计算机网络】了解内网、外网、宽带、带宽、流量、网速_墩墩分墩 - CSDN 博客
mac-ssh 配置 | Sail
如何科学管理你的密码
VirtualBox NAT 端口映射实现宿主机与虚拟机相互通信 | Shao Guoliang 的博客
CentOS7 配置网卡为静态 IP,如果你还学不会那真的没有办法了!
laisky-blog: 近期折腾 tailscale 的一些心得
使用 acme.sh 给 Nginx 安装 Let’ s Encrypt 提供的免费 SSL 证书 · Ruby China
acme 申请 Let’s Encrypt 泛域名 SSL 证书
从 nginx 迁移到 caddy
使用 Caddy 替代 Nginx,全站升级 https,配置更加简单 - Diamond-Blog
http.proxy - Caddy 中文文档
动手撸个 Caddy(二)| Caddy 命令行参数最全教程 | 飞雪无情的总结
Caddy | 学习笔记 - ijayer
Caddy 代理 SpringBoot Fatjar 应用上传静态资源
使用 graylog3.0 收集 open××× 日志进行审计_年轻人,少吐槽,多搬砖的技术博客_51CTO 博客
提高国内访问 github 速度的 9 种方法! - SegmentFault 思否
VM16 安装 macOS 全网最详细
2022 目前三种有效加速国内 Github
How to install MariaDB on Alpine Linux | LibreByte
局域网内电脑 - ipad 文件共享的三种方法 | 岚
多机共享键鼠软件横向测评 - 尚弟的小笔记
本文档发布于https://mrdoc.fun
-
+
首页
比特记事簿: 笔记: 使用电信 TR069 内网架设 WireGuard 隧道异地组网
> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [note.vibit.cc](https://note.vibit.cc/2020/04/tr069-wireguard.html) 序言 -- TR069 内网是运营商用于下发光猫管理网络的内网,同一运营商同一省份的内网中所有光猫互通,并且可以跑到链路速度。 TR069 内网用于架设异地组网隧道不占用宽带带宽,是同一运营商同一省份异地组网的比较好的选择。虽然光猫只有 1 个千兆网口,但是即便使用光猫的百兆口进行架设,也能跑到 100 Mbps 的速度,享受专线一般的待遇。 本文选用 WireGuard 来作为异地组网方案,是因为 WireGuard 支持在内核角度配置 FwMark 参数直接为 WireGuard 的数据流量打上连接标记,以简化相关路由表的配置。 需求 -- 每个节点需要: * 电信千兆光猫(百兆猫也可能可以实现,但是没有测试) * 内网 1 台双网卡的 Linux 系统的服务器(经过测试的系统有 CentOS 7 & 8,Debian 10,Ubuntu 18.04) * 相同运营商相同省份的宽带(经过测试的有电信和联通宽带) * 用于配置 DDNS 的域名,使用 Cloudflare 或阿里云解析 * 宽带拨号地址采用公网或 CGN 内网 IP 均可 搭建教程 ---- 本方案的大致配置思路如下。接下来为具体操作步骤。 1. 在光猫配置好 TR069 内网与网口的桥接。 2. 使用网线连上桥接后的光猫网口与内网服务器,使用 DHCP 获取 IP 地址,并屏蔽 DHCP 默认网关与 DNS 服务器的获取。 3. 配置 DDNS ,读取服务器使用的连接 TR069 的网卡 IP 并更新 Cloudflare 或阿里云的 DNS 解析配置。 4. 使用守护进程动态更新路由表的默认网关。 5. 配置 WireGuard ,使用 Fwmark 选项为流量打上连接标记,以此做策略路由,让 WireGuard 发往其他节点的流量从 TR069 内网的网卡出。 ### 光猫配置 首先,获取电信光猫的超级管理员密码。大部分地区的电信光猫的超级管理员用户名密码为:用户名 `telecomadmin` 密码 `telecomadmin` 。若这个密码不可用或是其他运营商的宽带,请自行在网上搜索获取超级管理员密码的方式,这里本文不再叙述。 若之前光猫是路由模式,直接在浏览器输入 `http://192.168.1.1` 即可访问光猫后台。若光猫是桥接模式(即使用路由器进行 PPPoE 拨号),则需要使用一台电脑,用网线插在光猫的任意网口上面,并设置 IP 地址为 `192.168.1.0/24` 网段内的地址进行操作。 [![](https://1.bp.blogspot.com/-e4DhI1EBA10/XoVioaOd7hI/AAAAAAAAAFQ/rUlqgfY0wFEIWj9KlL8UdBcN9Wb4KuM6QCLcBGAsYHQ/s1600/th.jpeg)](https://1.bp.blogspot.com/-e4DhI1EBA10/XoVioaOd7hI/AAAAAAAAAFQ/rUlqgfY0wFEIWj9KlL8UdBcN9Wb4KuM6QCLcBGAsYHQ/s1600/th.jpeg) 进入光猫后台界面之后,进入网络—连接界面,找到连接名称含有 `TR069` 字样的连接。记录下来这里的 VLAN ID 与 802.1p 数值,并新建一个连接。设置如下: [![](https://1.bp.blogspot.com/-l5j2HhBwg6M/XoVizvhzWwI/AAAAAAAAAFU/syhBSGlsMm8G0hn73hR2t0SsoI_0oRSVQCLcBGAsYHQ/s1600/1.jpg)](https://1.bp.blogspot.com/-l5j2HhBwg6M/XoVizvhzWwI/AAAAAAAAAFU/syhBSGlsMm8G0hn73hR2t0SsoI_0oRSVQCLcBGAsYHQ/s1600/1.jpg) * 封装类型:IPoE * 业务类型:其他 * 连接模式:桥接 * 启用 VLAN:是 * VLAN ID:上面记录的 VLAN ID * 802.1p 优先级策略:使用指定值 * 802.1p:上面记录的数值 * LAN 端口绑定:选 1 个没用的口,不要选 IPTV 口。 如果没有可选项的话去检查一下拨号的连接是否占满全部端口,是的话取消 1 个 配置完成之后,保存即可。之后使用 1 台设备用网线连接选择的网口进行测试,使用 DHCP 自动获取 IP。如果能获取到 `10.0.0.0/7` 范围的地址(开头是 10 或 11 的地址均可),即算配置成功。 ### 服务器网络配置 光猫配置完成之后,用网线连接光猫新的连接绑定的网口和服务器的 1 个网口。然后进行网络配置。这里的要点是使用 DHCP 获取 IP 地址,但是不使用 DHCP 的默认网关和 DNS 服务器。 以下将根据不同的操作系统分别讨论。本文假定连接光猫 TR069 内网的网卡为 `eth1` ,请根据实际情况进行更改。 #### UBUNTU 18.04 这个操作系统最简单,编辑 `/etc/netplan/50-cloud-init.yaml`加入以下配置即可。 ``` eth1: dhcp4: true dhcp4-overrides: use-routes: false use-dns: false use-hostname: false ``` 编辑完成后,`sudo netplan try` 敲 2 下回车确认即可。 #### CENTOS 编辑 `/etc/sysconfig/network-scripts/ifcfg-eth1` ,并修改以下条目即可。若该文件不存在请自行创建。 ``` BOOTPROTO="dhcp" ONBOOT="yes" DEFROUTE="no" PEERDNS="no" ``` 之后,使用 `ifup eth1` 启动网卡即可。 #### DEBIAN 或 UBUNTU 16.04 以下 首先编辑 `/etc/network/interfaces` 并增加以下条目。 ``` auto eth1 iface eth1 inet dhcp ``` 之后编辑 `/etc/dhcp/dhclient.conf` 并增加以下条目,使 DHCP 客户端只获取地址和网段,不获取其他信息。 ``` interface "eth1" { request subnet-mask, broadcast-address; } ``` 编辑完成后,使用命令 `ifup eth1` 启动网卡即可。 ### 配置 DDNS 由于 TR069 内网获得的 IP 地址不固定,我们需要 DDNS 来持续更新域名解析来获取对端地址来连接。和传统调用 API 获取 IP 地址的 DDNS 不同,我们这里需要获取网卡的 IP 地址进行上报。 使用以下命令安装 Python 环境以及本方案需要的所有包,并下载 DDNS 主程序代码。 #### CENTOS ``` yum -y install epel-release yum copr enable jdoss/wireguard yum -y install python3 git wireguard-dkms wireguard-tools subnetcalc git clone https://github.com/NewFuture/DDNS /usr/src/DDNS ``` #### UBUNTU ``` add-apt-repository ppa:wireguard/wireguard apt update apt -y install python3 git wireguard resolvconf subnetcalc git clone https://github.com/NewFuture/DDNS /usr/src/DDNS ``` #### DEBIAN ``` echo "deb http://mirrors.163.com/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable apt update apt -y install python3 git wireguard resolvconf subnetcalc git clone https://github.com/NewFuture/DDNS /usr/src/DDNS ``` 我们需要使用一个脚本来获取某个网卡的 IP 地址。创建 `/usr/bin/get-interface-ip` 文件如下。 ``` #!/bin/bash ifconfig $1 | grep -oP 'inet ((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}' | sed 's/inet //g' ``` 之后运行命令 `chmod +x /usr/bin/get-interface-ip` 赋予该脚本可执行权限。 接下来,创建 DDNS 的配置文件。本文使用 Cloudflare 进行示范。若使用 AliDDNS 或其他支持的 DDNS,参考项目文档进行配置即可。创建文件 `/usr/src/DDNS/config.json` 如下。 ``` { "$schema": "https://ddns.newfuture.cc/schema.json", "debug": false, "dns": "cloudflare", "id": "Cloudflare 邮箱地址", "index4": "shell:/usr/bin/get-interface-ip eth1", "index6": "default", "ipv4": [ "example1.example.com" ], "ipv6": [], "proxy": null, "token": "Cloudflare 的 API KEY" } ``` 创建完成之后,使用命令 `/usr/bin/python3 /usr/src/DDNS/run.py -c /usr/src/DDNS/config.json` 测试是否可以正常上报 DDNS 。若成功,则在 `/etc/crontab` 中添加以下条目来添加 DDNS 的计划任务。 ``` * * * * * /usr/bin/python3 /usr/src/DDNS/run.py -c /usr/src/DDNS/config.json ``` ### 配置路由表守护进程 TR069 内网 DHCP 到的网段也并不固定,默认网关也与公网并不相通。因此在上面的步骤中我们没有让 DHCP 获取默认网关,避免损坏系统的路由表导致服务器与公网连接中断。而 TR069 内网的网关为 DHCP 到的网段的第 1 个可用地址。 我们利用这一点,使用 subnetcalc 工具计算网段第一个可用地址作为默认网关,并将其配置为 table 305 路由表的默认网关,在配置 WireGuard 的时候会用到。 创建脚本 `/usr/bin/set-tr069-gateway` ,内容如下。并使用命令 `chmod +x /usr/bin/set-tr069-gateway` 赋予可执行权限。 ``` #!/bin/bash IP_REGEXP='((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}' LOCAL_IP=$(ifconfig $1 | grep -oP "inet $IP_REGEXP" | sed 's/inet //g') LOCAL_MASK=$(ifconfig $1 | grep -oP "mask $IP_REGEXP" | sed 's/mask //g') GATEWAY=$(subnetcalc $LOCAL_IP/$LOCAL_MASK -n | grep 'Host Range' | grep -oP $IP_REGEXP | head -n 1) ROUTE_TXT="default via $GATEWAY dev $1 table 305" echo $ROUTE_TXT bash -c "ip route replace $ROUTE_TXT || ip route add $ROUTE_TXT" ``` 添加之后,输入 `/usr/bin/set-tr069-gateway eth1` 将该脚本运行一次。确认无误之后,在 `/etc/crontab` 中添加以下条目来添加该脚本的计划任务。 ``` * * * * * root /usr/bin/set-tr069-gateway eth1 ``` ### 配置 WIREGUARD 完成上面的基础工作之后,我们就可以着手配置 WireGuard 了。首先,使用以下命令生成 WireGuard 的一对密钥。 ``` wg genkey | tee /root/privatekey | wg pubkey > /root/publickey ``` 之后,创建 WireGuard 配置文件 `/etc/wireguard/wg0.conf` 如下。这里我们使用了 FwMark 参数,使内核自动对 WireGuard 流量打上连接标记,而利用策略路由,将符合 TR069 网段并且打上连接标记的流量从 TR069 内网的网卡流出。 ``` [Interface] Address = 192.168.11.1/24 PrivateKey = <服务器私钥,/root/privatekey 的内容> ListenPort = 22000 FwMark = 0x131 PostUp = ip rule add pref 305 to 10.0.0.0/7 fwmark 0x131 lookup 305 PostDown = ip rule del pref 305 [Peer] PublicKey = <对端公钥,对方服务器的 /root/publickey 的内容> AllowedIPs = 192.168.11.2/32 Endpoint = example2.example.com:22000 PersistentKeepalive = 25 ``` 这里 Address 字段为服务器 WireGuard 内网地址。每个 Peer 的内网地址写在对应的 AllowedIPs 字段下。Endpoint 为对端服务器的配置的 DDNS 域名。若对端服务器同时承载网络的网关,在网段不冲突的情况下,可以在 AllowedIPs 写上对方所在的网段,而让网段互通。 本文只演示两个节点的情况。若有多个节点,按照格式增加 Peer 即可。 配置完成后,使用以下命令启动 WireGuard,即可通过 TR069 内网连通对方服务器,享受 100Mbps 对等的专线连接。 ``` wg-quick up wg0 systemctl enable wg-quick@wg0 ``` 写在最后 ---- 至此,我们已经实现了利用电信光猫 TR069 内网来搭建 WireGuard 隧道,实现服务器之间快速稳定的通信。 通信速度实际上受制于光猫的百兆网口的链路速度。事实上,如果不在意下行速度的话,完全可以把宽带移动到百兆口上,而用千兆口进行 TR069 内网通信,得到一条千兆对等隧道。一般而言,对于服务器的场景下,使用下行带宽不如上行带宽多,大多数情况下下行不会超过上行。深圳电信 500M 宽带就有 50M 的上行。 此外,这个方案并不需要宽带是开通的。只要宽带曾经开通过,即便被停机,仍然可以用这个方案架设隧道到其他能上网的地方来蹭网用。不过需要解决 DNS 的问题。这里在没有宽带的情况下,没有办法正常解析域名。可能需要一些其他的配置来解决这个问题。 希望大家喜欢恋恋这篇文章。 原文链接:https://nanahira.momobako.com/%E7%AC%94%E8%AE%B0-%E4%BD%BF%E7%94%A8%E7%94%B5%E4%BF%A1-tr069-%E5%86%85%E7%BD%91%E6%9E%B6%E8%AE%BE-wireguard-%E9%9A%A7%E9%81%93%E5%BC%82%E5%9C%B0%E7%BB%84%E7%BD%91/
Jonny
2022年1月8日 10:10
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
【腾讯云】爆款2核2G4M云服务器一年45元,企业首购最高获赠300元京东卡
【腾讯云】爆款2核2G4M云服务器一年45元,企业首购最高获赠300元京东卡
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期