[{"content":" MBGP MPLS VPN # MBGP MPLS VPN的优势 # MBGP MPLS VPN 作为一种新的VPN技术，解决了传统VPN的所有缺陷\n通过 MBGP MPLS VPN 搭建的隧道是动态建立的 能够让运营商的网络设备识别相同的客户网络，解决本地地址冲突问题 很好的控制VPN私网路由 隧道技术与MPLS # 在传统的 VPN 中（例如：GRE 隧道），为了能够实现私网IP 穿越公有互联网络，需要在原始的3层头部的外面再增加一个 4Byte 大小的 GRE 头部与 20Byte 大小的新的IP 头部，新的IP 头部中包含的是可在公网上路由的公有源IP与目的IP地址 在 MPLS网络中，MPLS的头部封装在原始的3层头部与2层头部之间（MPLS 头部在外，原始的3层头部在内） MPLS 的封装将原始的3层头部包裹在其中，形成了一条天然隧道，起到与 GRE 隧道一样的封装作用 MPLS隧道应用 # 在 MPLS 网络中，沿着LSP转发数据的LSR设备无需知道私网路由，根据 MPLS 头部中的标签进行数据转发 只需要在 MPLS 网络中的 LER设备上作处理就能够实现私网路由穿越公网 在非 MPLS 网络的客户上，客户与运营商的LER设备需要运行动态路由协议以便于将自身内部私网路由传递给运营商，运营商内部运行BGP MPLS倒数第二跳弹出(PHP) # 在LDP分配标签的过程中，倒数第一的路由器为倒数第二的路由器分配的标签永远是3，因此倒数第二路由器在给倒数第一发送数据时，就可以直接将标签3弹出，令倒数第一路由器直接查找路由表将数据转发至目的客户网络即可\nMPLS VPN组网结构 # 在 MBGP MPLS VPN 中定义了3个特殊名词：\nCE（Custom Edge Router）：非 MPLS网络的边界网络设备 PE （Provider Edge Router）：运营商的 MPLS 的边界网络设备，用来连接CE P （Provider Router）：工作在MPLS网络内的基于标签转发的路由器 VRF技术 # 若运营商同一台路由器连接不同的客户网络，不同客户网络之间使用相同私网网段，这将造成运营商设备（PE）的路由表混乱造成地址冲突问题\n因此提出的解决方案为：VRF (virtual routing fowarding)\nVRF 相当于是让一台物理路由器分裂多台逻辑路由器 每台 VRF路由器负责维护自身单独的路由表项，各个VRF 路由器的路由表项完全独立，互不可见 每台 VRF 路由器拥有3个独立： 独立的IP 路由表项 独立的端口/接口 独立的路由协议 各个VRF与各自的用户网络之间运行一个路由实例，该路由实例学习到的路由只能加入该VPN的路由表 各个路由实例与所属的VPN进行绑定，它们之间互相独立，只能学习到各自的邻居信息 MBGP协议 # 普通的BGPv4 仅仅只能够传递或删除IPv4 的路由，为了能够让BGP 承载多个协议的路由信息，RFC 对 BGP 进行扩展升级，升级后的BGP被称为【MBGP、MP-BGP I Multi- Protocol | 多协议】\n扩展后的 BGP 新增了3种属性：\nMP_REACH_NLRI： 多协议_可达性_网络层可达性信息 MP_UNREACH_NLRI： 多协议_非可达性网络层可达性信息 Extended_Communities（扩展的团体属性） 升级后的 MBGP 就能够传递 MBGP MPLS VPN、L2VPN、6PE 等路由信息 MBGP 的路由更新 # 扩展后的MBGP 相较于普通的BGPV4做了如下改动\n使用 MP_REACH_NLRI 替代了普通 BGP 中的 NLRI 与 Next Hop 属性 使用MP_UNREACH_NLRI 替代了普通 BGP 中的 Withdrawn-routest 在属性部分新增了 Extended_Communities MP_REACH_NLRI 属性 # 普通 BGP 更新消息中包含： 下一跳属性 NLRI: IPv4 地址与前缀长度 其它属性 MBGP 更新消息中包含： 下一跳属性 NLRI:IPv4 地址与前缀长度 其它属性 地址族 RD【路由区分器】 MP_UNREACH_NLRI属性 # 普通 BGP删除消息中包含：需要删除的路由的IPv4地址与前缀长度 MBGP 删除消息中包含： 需要删除的IPv4地址与前缀长度 地址族 RD【路由区分器】 RT (Route Target |路由标记) # RT的本质是每个VPN实例表达自己的路由取舍及喜好的方式 在PE设备上，发送某一个VPN用户的私网路由给其BGP邻居时，需要在MBGP的扩展团体属性区域中增加该VPN的ExportTarget属性 在PE设备上，需要将收到的MBGP路由的扩展团体属性中所携带的RT属性值，与本地每一个VPN的Import Target属性值相比较，当这两个值相同时，就需要将这条路由添加到该VPN的路由表中去 RT 的格式分力2类： AS号码 + 分配编号：100:1 IP 地址 +分配编号：172.16.1.1:1 RD 路由区分器Route Distinguisher # 作用：用来在MPLS 网络中的私网路由撤销时使用的 IPv4与VPNv4地址族 # 在 IPV4地址后面加上 RD 值，就变成了 VPNV4 地址族\n原来的标准的地址族就称为 IPV4\n私网标签 # RT属性和RD前缀顺利解决了私网路由的学习和撤销中存在的问题，然而因为VPN地址的冲突在数据转发过程也将遇到困难 需要在数据报文中增加一个标识，以帮助PE判断该报文是去往本地的哪个VPN 由于MPLS支持多层标签的嵌套，这个标识可以定义成MPLS标签的格式，即私网Label 实验操作 # 首先配置MPLS主干网络\n先用IGP协议建立设备互联，使得PE1设备可以ping通PE2\nPE1和PE2之间建立BGP连接\n创建VPN示例\n[Huawei]ip vpn-instance vpn1 [Huawei-vpn-instance-vpn1]route-distinguisher 100:1 [Huawei-vpn-instance-vpn1]vpn-target 100:1 both [Huawei-vpn-instance-vpn1]q [Huawei]int g0/0/1 ip binding vpn-instance vpn1 #绑定VPN实例 #接口IP消失需要重新配置IP 在主干网的各个路由器使能mpls\n[Huawei]mpls lsr-id #填routerid [Huawei]mpls [Huawei-mpls]quit [Huawei]mpsl ldp [Huawei-mpls-ldp]quit [Huawei]int gx/x/x #各路由器互联的接口 [Huawei-GigabitEthernetx/x/x]mpls [Huawei-GigabitEthernetx/x/x]mpls ldp 在与Hub/Spoke路由器相连的PE路由器的接口使能mpls\n[Huawei]interface Gx/x/x/ #与连接Hub/Spoke路由器的接口 [Huawei-GigabitEthernetx/x/x]mpls 配置Hub/Spoke路由器\n与PE建立连接即可\n[Huawei]ospf 2 [Huawei-ospf-2]area 0 [Huawei-ospf-2-area-0.0.0.0]network x.x.x.x x.x.x.x #宣告自己与PE相连网段 [Huawei-ospf-2-area-0.0.0.0]network x.x.x.x x.x.x.x #宣告自己内部私网网段 配置PE与Hub/Spoke之间的动态路由协议\n在PE上\n[Huawei]ospf 2 vpn-instance vpn1 area 0 network x.x.x.x x.x.x.x #宣告与Hub/Spoke路由器相连的网段 qu PE路由器配置路由双向注入\nPE1中\n[Huawei]bpg 1 ipv4-family vpnv4 peer x.x.x.x enable #对等体routerid qu ipv4-family vpn-instance vpn1 import-route ospf 2 qu [Huawei]ospf 2 vpn-instance vpn1 import-route bgp ","date":"16 January 2025","externalUrl":null,"permalink":"/doc/mbgp-mpls-vpn/","section":"文档","summary":"MBGP MPLS VPN # MBGP MPLS VPN的优势 # MBGP MPLS VPN 作为一种新的VPN技术，解决了传统VPN的所有缺陷","title":"MBGP MPLS VPN原理\u0026配置","type":"doc"},{"content":"","date":"16 January 2025","externalUrl":null,"permalink":"/","section":"肾结💩的妙妙屋","summary":"","title":"肾结💩的妙妙屋","type":"page"},{"content":"","date":"30 October 2024","externalUrl":null,"permalink":"/tags/bitwarden/","section":"Tags","summary":"","title":"Bitwarden","type":"tags"},{"content":" 几天前我发现我的微软帐号被人撞库成功，幸好开了两步认证，于是乎我马上修改密码；我跟我朋友分享了此事，他让我搭个密码管理库以防自己忘记密码，而且 Bitwarden 支持生成随机密码，大大提高密码的安全性 那么就在此介绍我是如何搭建个人密码管理器的\n什么是 Bitwarden 和 Vaultwarden # Vaultwarden 是用 Rust 编写的非官方 Bitwarden 兼容服务器\nBitwarden 可帮助您安全可靠地生成、保存和管理登录信息。您还可以与组织中的其他人轻松共享安全信息。\n我们的目的是搭建第三方的 Bitwarden 服务器 即 Vaultwarden ，使用Bitwarden将我们的密码存放到此 Vaultwarden 服务器\n安装 Vaultwarden 服务端 # ssh连接到vps，创建 Vaultwarden 目录\nmkdir vaultwarden -p cd vaultwarden 创建并编辑 docker-compose.yml 文件\nversion: \u0026#39;3.9\u0026#39; services: vaultwarden: image: \u0026#39;vaultwarden/server:latest\u0026#39; restart: unless-stopped volumes: - \u0026#39;./vw-data/:/data/\u0026#39; container_name: vaultwarden ports: - 80:80 docker compose up -d 安装 nginx proxy manager # 在此之前，由于 vaultwarden 的安全要求不允许 http 访问 让我们来使用 nginx proxy manager 来反向代理 vaultwarden 服务吧 同样使用 docker 来部署 cd ~ mkdir nginx_proxy_manager cd nginx_proxy_manager vim docker-compose.yml #docker-compose.yml version: \u0026#34;3\u0026#34; services: app: image: \u0026#39;jc21/nginx-proxy-manager:latest\u0026#39; container_name: npm_app restart: unless-stopped ports: # These ports are in format \u0026lt;host-port\u0026gt;:\u0026lt;container-port\u0026gt; - \u0026#39;80:80\u0026#39; # Public HTTP Port - \u0026#39;443:443\u0026#39; # Public HTTPS Port - \u0026#39;81:81\u0026#39; # 管理端口，修改为自己的 # Add any other Stream port you want to expose # - \u0026#39;21:21\u0026#39; # FTP environment: DB_MYSQL_HOST: \u0026#34;db\u0026#34; DB_MYSQL_PORT: 3306 DB_MYSQL_USER: \u0026#34;npm\u0026#34; # 数据库用户名 DB_MYSQL_PASSWORD: \u0026#34;npm\u0026#34; # 数据库密码 DB_MYSQL_NAME: \u0026#34;npm\u0026#34; # 数据库名称 # Uncomment this if IPv6 is not enabled on your host # DISABLE_IPV6: \u0026#39;true\u0026#39; volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt depends_on: - db logging: driver: \u0026#34;json-file\u0026#34; # 限制log文件 options: max-size: \u0026#34;100M\u0026#34; # 限制log文件大小 networks: - npm db: image: \u0026#39;jc21/mariadb-aria:latest\u0026#39; restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: \u0026#39;npm\u0026#39; # 数据库ROOT密码 MYSQL_DATABASE: \u0026#39;npm\u0026#39; # 数据库名称 MYSQL_USER: \u0026#39;npm\u0026#39; # 数据库用户名 MYSQL_PASSWORD: \u0026#39;npm\u0026#39; # 数据库密码 volumes: - ./mysql:/var/lib/mysql networks: - npm networks: # 连接外部网络，方便内部代理 npm: external: true docker network create npm 修改一下 vaultwarden docker-compose.yml 文件把端口改成8080\nversion: \u0026#39;3.9\u0026#39; services: vaultwarden: image: \u0026#39;vaultwarden/server:latest\u0026#39; restart: unless-stopped volumes: - \u0026#39;./vw-data/:/data/\u0026#39; container_name: vaultwarden ports: - 8080:80 cd ~/nginx_proxy_manager docker compose up -d cd ~/vaultwarden docker compose up -d 设置反向代理 # 浏览器输入 IP地址:81 进入npm设置，第一次登录使用默认用户\u0026amp;密码，然后设置管理员密码\nEmail: admin@example.com Password: changeme 此处Email可填写不存在的地址(只用作登录用途) 修改密码后设置代理服务 Domain Names：反向代理的域名，输入域名后按回车确认(该域名解析是本机公网ip)。 Forward Hostname / IP：填写代理的ip(为方便填写docker0网卡IP也可)。 Forward Port：反向代理的端口，这里就是8080。 Cache Assets：启用缓存。 Block Common Exploits：阻止一些常见漏洞。 Websockets Spport：支持Websockets。 Access List：配合多账户使用，选择权限范围。 申请一个证书\nSSL Certificate：选择证书，Request a new SSL Certificate使用当前域名申请新证书。 Force SSL：强制使用SSL。 HTTP/2 Support：支持HTTP/2协议标准。 HSTS Enabled：使用HSTS策略机制，有助于保护网站免受中间人攻击。 HSTS Subdomains：子域名适用 Use a DNS Challenge：使用域名解析商方案。 Email Address for Let’s Encrypt：申请Let\u0026rsquo;s Encrypt证书使用的电子邮箱。 I Agree to the Let’s Encrypt Terms of Service：同意Let\u0026rsquo;s Encrypt服务 点击save\n浏览器输入 域名 进行简单的配置，点击下方创建用户 此处电子邮件地址随便填写即可(单纯登录用途)，也可以填写真实的地址； 然后设置登录密码，登录 至此服务端建立完毕，接下来客户端如何接入\n客户端接入 # 根据平台先下载 客户端\n各平台接入方式大同小异，无非就是选择自托管服务器也就是我们刚刚搭建的非官方 Bitwarden 兼容服务器，设置服务器URL为反向代理的域名即可\n最后 # Bitwarden 可以将你的密码保存到你的服务器里，自身也是一个密码生成工具，同样Chrome也支持该插件，终于摆脱忘记密码的烦恼了呼呼！！\n","date":"30 October 2024","externalUrl":null,"permalink":"/doc/vaultwarden-bitwarden/","section":"文档","summary":"将展示如何搭建非官方 Bitwarden 兼容服务器并用 Bitwarden 连接它","title":"Bitwarden\u0026Vaultwarden","type":"doc"},{"content":"","date":"30 October 2024","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"30 October 2024","externalUrl":null,"permalink":"/tags/vaultwarden/","section":"Tags","summary":"","title":"Vaultwarden","type":"tags"},{"content":" 安装Hysteria2服务端 # 使用官方服务端端安装脚本\nbash \u0026lt;(curl -fsSL https://get.hy2.sh/) 生成自签证书 # openssl req -x509 -nodes -newkey ec:\u0026lt;(openssl ecparam -name prime256v1) -keyout /etc/hysteria/server.key -out /etc/hysteria/server.crt -subj \u0026#34;/CN=bing.com\u0026#34; -days 36500 \u0026amp;\u0026amp; sudo chown hysteria /etc/hysteria/server.key \u0026amp;\u0026amp; sudo chown hysteria /etc/hysteria/server.crt 服务端配置 # 编辑配置文件\nvim /etc/hysteria/config.yaml listen: :443 tls: cert: /etc/hysteria/server.crt key: /etc/hysteria/server.key auth: type: password password: gRa6gZACqwQms6 # 请及时更改密码 masquerade: type: proxy proxy: url: https://bing.com # 伪装网站 rewriteHost: true 服务管理\nsystemctl enable --now hysteria-server.service systemctl restart hysteria-server.service systemctl status hysteria-server.service 客户端配置 # Linux # sing-box 配置文件\n{ \u0026#34;type\u0026#34;: \u0026#34;hysteria2\u0026#34;, \u0026#34;up_mbps\u0026#34;: 500, #按照实际带宽 \u0026#34;down_mbps\u0026#34;: 500, #按照实际带宽 \u0026#34;server\u0026#34;: \u0026#34;服务端IP或域名\u0026#34;, \u0026#34;password\u0026#34;:\u0026#34;gRa6gZACqwQms6\u0026#34;, \u0026#34;tls\u0026#34;: { \u0026#34;enabled\u0026#34;: true, \u0026#34;server_name\u0026#34;: \u0026#34;bing.com\u0026#34;, \u0026#34;insecure\u0026#34;: true }, \u0026#34;server_port\u0026#34;: 443, \u0026#34;tag\u0026#34;: \u0026#34;xxx\u0026#34; }, clash-verge # 我使用的是代理集合proxy-providers，只需添加节点即可\n- name: \u0026#34;xxx\u0026#34; type: hysteria2 server: 服务端IP或域名 port: 443 # up和down均不写或为0则使用BBR流控 up: \u0026#34;500 Mbps\u0026#34; # 若不写单位，默认为 Mbps down: \u0026#34;500 Mbps\u0026#34; # 若不写单位，默认为 Mbps password: gRa6gZACqwQms6 sni: bing.com skip-cert-verify: true ","date":"28 October 2024","externalUrl":null,"permalink":"/doc/how-to-install-hysteria2config/","section":"文档","summary":"安装Hysteria2服务端 # 使用官方服务端端安装脚本","title":"Hysteria2的安装使用","type":"doc"},{"content":" 将使用容器安装headscale 首先安装容器也就是docker # 安装过程就不记录，详细教程在官网。\n配置并运行 # 准备一个目录用来存放headscale的文件，它的最终形态是这样的 cd headscale mkdir config mkdir data touch docker-compose.yml root@VM-A2J416XGSG53:~/headscale# tree . ├── config ├── data └── docker-compose.yml 下载配置示例并将其保存到config目录下 wget https://raw.githubusercontent.com/juanfont/headscale/refs/heads/main/config-example.yaml -O config.yaml server_url改成服务器解析的域名 listen_addr: 0.0.0.0:8080 #listen_addr: 127.0.0.1:8080 prefixes字段，将ipv6注释，自定义私有地址网段： refixes: #v6: fd7a:115c:a1e0::/48 v4: 10.0.0.0/8 修改nameservers，添加几个国内dns： nameservers: global: - 223.5.5.5 - 119.29.29.29 - 8.8.8.8 - 2606:4700:4700::1111 - 2606:4700:4700::1001 编辑 docker-compose.yaml 文件，启动服务并验证 version: \u0026#34;3.6\u0026#34; services: headscale: image: ghcr.io/juanfont/headscale container_name: headscale volumes: - ./config:/etc/headscale/ - ./data:/var/lib/headscale ports: - 8080:8080 - 9090:9090 command: serve restart: unless-stopped #cap_add: # - CAP_NET_BIND_SERVIC docker compose up -d 浏览器输入http://公网IP或域名:8080/windows或http://公网IP或域名:8080/apple，有内容返回证明服务启动成功\n创建用户 # docker exec -it headscale headscale user create USERNAME USERNAME 为你想要设置的用户名称\ndocker exec -it hedscale headscale user list 终端接入 # 操作系统 Headscale支持 MacOS yes Windows yes linux yes IOS yes Android yes Mac \u0026amp; iPhone \u0026amp; iPad # Mac 浏览器打开http://公网IP或域名:8080/apple，下载macOS AppStore profile文件并运行 打开系统设置\u0026gt;通用\u0026gt;设备管理 双击打开，安装 在app商店(非国区ID)安装Tailscale客户端并运行它,在状态栏上点击应用图标按下command+, 点击Add Account... 会发现浏览器会打开一个验证页面 此时我们回到headscale服务端运行: docker exec -it headscale headscale nodes register --user USERNAME --key nodekey:345c366fe6de46a8ae56ba6dfe706573b45017a8432f08c9ad0459c9adf7ca77 Machine ffzmacbookpro14 registered 提示Machine XXX registered为接入成功；注意USERNAME应为上面创建用户时的用户\niPhone和iPad同理使用appstore下载tailscale 打开软件点击右上角 login \u0026gt; Use a cuntom\u0026hellip; \u0026gt; 输入http://公网IP或域名:8080/ 依旧会弹出验证页面然后回到headscale服务端运行即可 ","date":"14 October 2024","externalUrl":null,"permalink":"/doc/headscale-install/","section":"文档","summary":"将使用容器安装headscale 首先安装容器也就是docker # 安装过程就不记录，详细教程在官网。","title":"Headscale食用教程","type":"doc"},{"content":" 生命不息折腾不止 ","date":"27 September 2024","externalUrl":null,"permalink":"/doc/","section":"文档","summary":" 生命不息折腾不止 ","title":"文档","type":"doc"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]