飞羽小随笔-个人技术文章 - Linux
type: channel
link: https://blog.8086k.cn/category/Linux/
description: Linux相关技术分享
items: Cloudflare worker更新华为DNS解析服务【支持群晖】
items: 通过Wireguard和RouterOS将服务器的ip分配给本地
items: DNSPOD的ddns ipv6脚本
items: 使用LXC使用以及openwrt模板镜像制作
items: Padavan校园网ipv6穿透教程
items: 猫盘群晖内网穿透npc打包全过程
items: harbor制作私有docker仓库
items: Proxmox VE(PVE)开启IOMMO并开启网卡(82576)SRIOV功能【时隔半年，我回来了】
items: 树莓派镜像制作
items: 使用OVS+Docker+quagga搭建BGP网络

Cloudflare worker更新华为DNS解析服务【支持群晖】
type: item
date: 2022-10-20T22:19:00+08:00
description: 鉴于Routeros的DDNS解析脚本不能提取返回Header，而华为DNS可以任意设置TTL，而华为目前没有完整API，因此借助了Cloudflare Worker，封装了一个API。视频链接：☺教程和文章更配哦~☺1、起因1、想要让DDNS解析快点，需要减小DNS系统的TTL2、常年使用DNSPOD，但是专业版DNSPOD更改TTL只能更改60，企业版才能改为13、想要不受服务器的限制2、技术分享首先需要你拥有一个Cloudflare的账号，没有可以注册一个创建worker2.1 点击创建服务2.2 增加一个服务名称，并创建服务2.3 快速编辑，复制代码，保存代码我会放到文末，需要的可以自取！！！创建完毕，点击发送，可以看到执行内容下面介绍一下如何使用通过GET提交方式，如下图所示，需要用到账户名、密码、zoneid、recordsetid、要更新IP地址、TTL信息相关信息获取教程在下面5. 附加内容华为云账户名获取1.1 在右上角，找到基本信息，点进去2.1 账号名就是华为云账户zoneid和recordsetid获取2.1 首先，找到你的域名，创建一个，如图所示2.2 点击F12，出现控制台，调整为Network栏2.3 修改值为某个IP，点击确定，搜索recordsets2.4 找到如下图的链接/** * Example someHost is set up to take in a JSON request * Replace url with the host you wish to send requests to * @param {string} url the URL to send the request to * @param {BodyInit} body the JSON data to send in the request */ //iam.ap-southeast-3.myhuaweicloud.com const someHost = 'https://iam.ap-southeast-3.myhuaweicloud.com'; //const someHost = 'https://iam.myhuaweicloud.com'; const url = someHost + '/v3/auth/tokens'; /** * gatherResponse awaits and returns a response body as a string. * Use await gatherResponse(..) in an async function to get the response body * @param {Response} response */ async function gatherResponse(response) { const { headers } = response; return headers.get('x-subject-token'); } async function handleRequest(request) { const { searchParams } = new URL(request.url); let name = searchParams.get('name'); let password = searchParams.get('password'); let hwZONEID = searchParams.get('zoneid'); let hwRECORDSETID = searchParams.get('recordsetid'); let hwip = searchParams.get('ip'); let ttl = searchParams.get('ttl'); let requestURL = new URL(request.url) let path = requestURL.pathname.split('/')[1]; if(name == null){ const ip = request.headers.get("cf-connecting-ip") return new Response("华为dns更新\n使用方法：https://"+request.url+"?name=华为云账户&password=华为云密码&zoneid=域名zoneid&recordsetid=域名recordsetid&ip=IP地址&ttl=生效时间\n当前ip:"+ip,{status: 200}); } console.log(name) const body = { "auth": { "identity":…

通过Wireguard和RouterOS将服务器的ip分配给本地
type: item
date: 2022-01-30T20:07:00+08:00
description: 前几天想要把服务器中远程ip分配给家里的某台服务器使用，因此写了这个教程记录一下过程。传统的frp、ngrok虽然可以达到内网穿透的效果，但是对于全端口映射是非常不方便的，因此想到使用Wireguard和RouterOS将服务器的ip分配给本地的方案。参考这个大佬的链接：https://aoyouer.com/posts/wireguard-l3-forward/主要分为以下几个过程：1、开启net.ipv4.ip_forward2、安装wireguard3、配置wireguard服务端4、更改ssh端口5、routeros配置wireguard6、添加路由规则7、测试1、开启net.ipv4.ip_forwardecho "net.ipv4.ip_forward=1">>/etc/sysctl.conf sysctl -p2、安装wireguardapt install wireguard iptables -y #安装wireguard modprobe wireguard && lsmod | grep wireguard #验证安装是否成功2、配置wireguard服务端公钥私钥生产cd /etc/wireguard # 首先进入配置文件目录 wg genkey | tee sprivatekey | wg pubkey > spublickey wg genkey | tee cprivatekey | wg pubkey > cpublickey #生成公钥和私钥服务端配置echo "[Interface] # 服务器的私匙，对应客户端配置中的公匙（自动读取上面刚刚生成的密匙内容） PrivateKey = $(cat sprivatekey) # 本机的内网IP地址，一般默认即可，除非和你服务器或客户端设备本地网段冲突 Address = 192.168.145.1/24 PostUp = iptables -t nat -A PREROUTING -d 10.0.24.11 -p tcp -m multiport --dports 65533,65534 -j ACCEPT; iptables -t nat -A PREROUTING -d 10.0.24.11 -p udp -m multiport --dports 65533,65534 -j ACCEPT; iptables -t nat -A PREROUTING -d 10.0.24.11 -j DNAT --to-destination 10.10.0.34; iptables -t nat -A POSTROUTING -s 10.10.0.34 -j SNAT --to-source 10.0.24.11; #10.0.24.11替换为你自己的网卡地址 65533为ssh端口 65534为wireguard端口 PostDown = iptables -t nat -D PREROUTING -d 10.0.24.11 -p tcp -m multiport --dports 65533,65534 -j ACCEPT; iptables -t nat -D PREROUTING -d 10.0.24.11 -p udp -m multiport --dports 65533,65534 -j ACCEPT; iptables -t nat -D PREROUTING -d 10.0.24.11 -j DNAT --to-destination 10.10.0.34; iptables -t nat -D POSTROUTING -s 10.10.0.34 -j SNAT --to-source 10.0.24.11; #10.0.24.11替换为你自己的网卡地址 # 服务端监听端口，可以自行修改 ListenPort = 65534 # 保持默认 MTU = 1420 # [Peer] 代表客户端配置，每增加一段 [Peer] 就是增加一个客户端账号。 [Peer] # 该客户端账号的公匙，对应客户端配置中的私匙 PublicKey = $(cat cpublickey) # 该客户端账号的内网IP地址 AllowedIPs = 192.168.145.0/24,10.10.0.0/16"|sed '/^#/d;/^\s*$/d' > wg0.conf修改ssh端口vim /etc/ssh/sshd_config 修改 Port 22 改为 Port 65533 systemctl restart sshd服务端启动wg-quick up wg04、routeros配置wireguardecho "[Interface] # 客户端的私匙，对…

DNSPOD的ddns ipv6脚本
type: item
date: 2021-03-18T19:54:00+08:00
description: 分享一个自己写的DNSPOD DDNS ipv6脚本1、脚本分享#!/bin/bash DNSPOD_ID='你申请的DNSPOD ID' # DNSPOD 域名ID DNSPOD_PASSWORD='你的DNSPOD TOKEN' # DNSPOD Token RECORD_ID='域名RECORD_ID' #DNSPOD TOKEN ID SUB_DOMAIN='域名前缀' # SUB DOMAIN DOMAIN='域名后缀' # DOMAIN dns='2400:3200::1' check_ipv6_connect(){ check_connect=$(ping6 -w 3 240c::6666 -c 1 | grep ttl) if [ "$check_connect" == "" ] then echo "connect error" sleep 2 systemctl restart networking sleep 2 dhclient exit 1 fi } source /etc/profile check_ipv6_connect ipv6ustc=$(dig @240C::6666 AAAA test6.ustc.edu.cn +short) a=$(curl -s -H 'Host:test6.ustc.edu.cn' http://[$ipv6ustc]/backend/getIP.php | awk -F '"' '{print $4}') b=$(curl -s -X POST https://dnsapi.cn/Record.Info -d 'login_token='$DNSPOD_ID','$DNSPOD_PASSWORD'&format=json&domain='$DOMAIN'&record_id='$RECORD_ID'' |awk -F '"' '{print $60}') if [ "$a" != "$b" ] then curl -X POST https://dnsapi.cn/Record.Modify -d 'login_token='$DNSPOD_ID','$DNSPOD_PASSWORD'&format=json&domain='$DOMAIN'&record_id='$RECORD_ID'&sub_domain='$SUB_DOMAIN'&value='$a'&record_type=AAAA&record_line_id=0' echo "changed" else echo "no change" fi echo "success"2、参数说明DNSPOD_ID、DNSPOD_PASSWORD：点我进入DNSPOD密钥地址，创建密钥，如图所示：这两个参数填上RECORD_ID获取需要你的打卡域名解析记录，如图所示需要你使用先新建你的域名，例如blog.8086k.cn接下来打开F12，并切换到network选项按照图上方法操作可以看到两条记录，点开，如下操作添加上即可。SUB_DOMAIN:域名前缀 例如你的域名 blog.8086k.cn，那么SUB_DOMAIN就是blogDOMAIN:域名后缀 例如你的域名 blog.8086k.cn，那么DOMAIN就是8086k.cn3、使用方法放入到linux系统中，crontab中即可*/1 * * * * /root/ipv6.sh

使用LXC使用以及openwrt模板镜像制作
type: item
date: 2021-03-18T14:12:00+08:00
description: 本文主要介绍openwrt打包成lxc模板，并启动。1、LXC是什么[collapse title="LXC介绍" status="true"]Linux Container容器是一种内核虚拟化技术，可以提供轻量级的虚拟化，以便隔离进程和资源。[/collapse]2、openwrt介绍[collapse title="openwrt介绍" status="true"]OpenWrt是适合于嵌入式设备的一个Linux发行版。相对原厂固件而言，OpenWrt不是一个单一、静态的固件，而是提供了一个可添加软件包的可写的文件系统。这使用户可以自由的选择应用程序和配置，而不必受设备提供商的限制，并且可以使用一些适合某方面应用的软件包来定制你的设备。对于开发者来说，OpenWrt是一个框架，开发者不必麻烦地构建整个固件就能得到想要的应用程序；对于用户来说，这意味着完全定制的能力，与以往不同的方式使用设备，OPKG包含超过3500个软件。 默认使用LuCI作为web交互界面。[/collapse]3、LXC安装安装非常简单，apt即可。apt-get install bridge-utils apt-get install lxc lxc-checkconfig apt-get install apparmor-profiles4、配置首先桥接网卡在/etc/network/interfaces文件中添加br0网桥# /etc/network/interfaces auto br0 iface br0 inet static address ipv4地址 netmask ipv4子网掩码 bridge_ports 桥接网卡名 bridge_stp off bridge_fd 2 bridge_maxwait 20 iface br0 inet6 static address ipv6地址/120 gateway ipv6网关 dns-nameservers ipv6dns配置lxc默认文件在/etc/lxc/default.conf中添加如下内容#/etc/lxc/default.conf lxc.apparmor.profile = generated lxc.apparmor.allow_nesting = 1 lxc.net.0.type=veth lxc.net.0.link = br0 lxc.net.0.flags = up lxc.net.0.hwaddr = 00:11:22:xx:xx:xx5、使用创建镜像模板lxc-create -t download -n openwrt -- --no-validate --server mirrors.tuna.tsinghua.edu.cn/lxc-images启动容器lxc-start -n ubuntu1 -d停止容器lxc-stop --name ubuntu1销毁容器lxc-destroy --name ubuntu16、openwrt镜像制作首先下载你心仪的openwrt系统在linux下解压，使用如下命令gzip -d openwrt-x86-64-generic-squashfs-rootfs.img.gz解压之后出现openwrt-x86-64-generic-squashfs-rootfs.img文件安装squashfs-toolsapt install squashfs-tools解包会解压到squashfs-root目录进入 cd squashfs-rootunsquashfs openwrt-x86-64-generic-squashfs-rootfs.img mv squashfs-root rootfs解包后如图所示：这样lxc的rootfs就制作好了制作openwrt模板1、在/var/lib/lxc新建openwrt目录,mkdir /var/lib/lxc/openwrt touch /var/lib/lxc/openwrt/config2、把以下内容写入到config中# Template used to create this container: /usr/share/lxc/templates/lxc-download # Parameters passed to the template: --server mirrors.tuna.tsinghua.edu.cn/lxc-images # Template script checksum (SHA-1): 273c51343604eb85f7e294c8da0a5eb769d648f3 # For additional config options, please look at l…

Padavan校园网ipv6穿透教程
type: item
date: 2020-12-15T12:46:00+08:00
description: 自我折腾记录，校园网接入Padavan路由器没有ipv6，因此如果想要内网拥有IPV6，那么此教程正好适合你。1. 配置IPV6首先padavan设置需要这么设置，把IPV6打开，自动获取IPV6地址2. 配置脚本添加以下脚本到自定义设置->脚本->在路由器启动后执行的最后一行，如图所示modprobe ip6table_mangle ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i eth2.2 brctl addif br0 eth2.23. 重启电脑，IPV6就可以连上了。[scode type="blue"]参考博客：https://www.jianshu.com/p/ed34cbf3b90c[/scode]

猫盘群晖内网穿透npc打包全过程
type: item
date: 2020-03-26T17:38:00+08:00
description: 本文主要内容是打包arm的spk文件,为以后自己方便查阅。一、nps介绍[collapse title="nps介绍" status="true"]nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。balabala...具体详情请见github作者地址[/collapse]二、起因[scode type="yellow"]发现nps作者github下又群晖的安装包，但是是x86的，想着自己有个扎矿猫盘刷了群晖，是arm架构的，那么没办法，自己编译吧。-_-自己动手丰衣足食.jpg[/scode]三、逐渐的看代码过程。。。pass本次关键：从nps项目下的build.sh脚本看出来怎么部署，那么就按照build.sh脚本来吧废话不说了 进入正题吧四、正题开始4.1 部署环境[scode type="blue"]首先安装docker，安装过程pass，不会的请参照本博客其他帖子。[/scode]4.2 下载nps、docker镜像、spksrcroot@server:~# mkdir WorkShop #新建工作目录 root@server:~/WorkShop# https://github.com/ehang-io/nps.git # git clone nps项目 root@server:~/WorkShop# git clone https://github.com/cnlh/spksrc.git ~/WorkShop/spksrc # git clone spksrc项目 root@server:~/WorkShop# mkdir ~/WorkShop/spksrc/nps && cp -rf /root/WorkShop/nps/* ~/WorkShop/spksrc/nps/ # 拷贝文件 root@server:~/WorkShop/nps# docker pull synocommunity/spksrc #拉取镜像 有点大-_- root@server:~/WorkShop/nps# docker run -itd --name spksrc --env VERSION=0.26.6 -e GOPROXY=direct -v ~/WorkShop/spksrc:/spksrc synocommunity/spksrc /bin/bash # 运行容器 root@server:~/WorkShop/nps# docker exec -it spksrc /bin/bash -c 'cd /spksrc && make setup && cd /spksrc/spk/npc && make' # a few moments later... # 先试着编译X86的 没问题进行下一步[scode type="blue"]到这里有两种方法，一种简单点，另一种需要改Makefile文件[/scode][scode type="red"]第一种方法[/scode]root@server:~/WorkShop/nps# docker exec -it spksrc /bin/bash -c 'cd /spksrc/spk/npc && make clean && cd /spksrc && make setup && cd /spksrc/spk/npc && make arch-aarch64' # 直接加架构，编译成功 #可以直接把~/WorkShop/spksrc/packages/里的spk文件复制出来直接用了[scode type="red"]第二种方法[/scode]#更改Makefile root@server:~/WorkShop/spksrc/spk/npc# pwd /root/WorkShop/spksrc/spk/npc[scode type="blue"]把47行左右改为[/scode]ifeq ($(findstring $(ARCH),armada37xx),$(ARCH)) GO_ARCH = arm64 endif[scode type="blue"]之后执行一下代码，同样可以编译成功[/scode]root@harbor:~/WorkShop/spksrc/spk/npc# docker exec -it spksrc /bin/bash -c 'cd /spksrc/spk/npc && make clean && cd /spksrc && make setup && cd /spksrc/spk/npc && make arch-armada37xx-6.2' root@harbor:~/WorkShop/spksrc/packages# pwd /root/WorkShop…

harbor制作私有docker仓库
type: item
date: 2020-03-24T21:30:00+08:00
description: 本文主要内容是搭建harbor,并且记录自己的一些踩坑记录，为以后自己方便查阅。一、harbor1.1 harbor介绍[collapse title="harbor介绍" status="true"]Harbor是VMware公司开源的企业级Docker Registry项目，其目标是帮助用户迅速搭建一个企业级的Docker私有镜像仓库。Harbor基于官方Registry V2实现，提供了管理UI，基于角色的访问控制，LDAP集成、镜像复制、以及审计日志等企业用户需求的功能。balabala...具体详情请见baidu[/collapse]二、harbor安装[scode type="blue"]harbor安装没什么太大难度，具体请看代码。[/scode]2.1 首先需要安装docker[scode type="blue"]我选择的docker版本是19.03.8，系统是ubuntu16.04[/scode]参照官方安装教程安装root@vps:~# apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common #安装依赖 root@vps:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - root@vps:~# apt-key fingerprint 0EBFCD88 pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) <docker@docker.com> sub rsa4096 2017-02-22 [S] root@vps:~# add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" root@vps:~# apt-get update root@vps:~# apt-get install docker-ce docker-ce-cli containerd.io #安装docker，不出意外应该可以成功安装[scode type="blue"]如果是其他系统，请参考官网文档[/scode]2.2 安装docker-composeroot@vps:~# wget https://github.com/docker/compose/releases/download/1.26.0-rc3/docker-compose-Linux-x86_64 #下载docker-compose root@vps:~# cp ./docker-compose-Linux-x86_64 /usr/local/bin/docker-compose #放入/usr/local/bin/文件夹 root@vps:~# chmod +x /usr/local/bin/docker-compose #给执行权限 root@vps:~# docker-compose --version docker-compose version 1.26.0-rc3, build 46118bc5 #查看版本2.3 接下来安装harbor[scode type="blue"]我个人使用的是在线安装harbor[/scode]root@vps:~# wget https://github.com/goharbor/harbor/releases/download/v1.10.1/harbor-online-installer-v1.10.1.tgz #下载harbor root@vps:~# tar -zxvf harbor-online-installer-v1.10.1.tgz #解压 root@vps:~# cd harbor/ #进入harbor目录 root@vps:~# vim harbor.yml #编辑harbor.yml配置文件，每个参数后都有注释，这里就不解释了 root@vps:~# ./install.sh #安装2.4 harbor安装完成了可以去登录进去看看了，默认有一个library公有仓库，可以删除，放个截图：[scode type="blue"]随心所欲修改吧。[/scode]2.5 问题如果你有问题，请跟我接着看：[scode type="bl…

Proxmox VE(PVE)开启IOMMO并开启网卡(82576)SRIOV功能【时隔半年，我回来了】
type: item
date: 2020-02-21T18:48:00+08:00
description: 82576在KVM虚拟机下使用网卡的SRIOV功能直通进虚拟机，减少使用Proxmox VE虚拟网卡的NAT功能，提高网卡性能，降低CPU占用。哔哩哔哩链接：文字不带劲，来视频一、pve介绍简单来说：Proxmox VE是一个集成OPENVZ 支持KVM应用的环境。二、单根I/O虚拟化(SRIOV)介绍[collapse title="单根I/O虚拟化(SRIOV)介绍" status="false"]I/O虚拟化可以提高服务器性能和简化硬件要求，而且同时可以在服务器上增加I/O密集型虚拟机的最大数量。SR-IOV技术现已可以开始把具有SR-IOV功能的设备定义成为一种外围设备物理功能模块（PF）并且使之能与主机hypervisor系统直接相互交互信息。PF主要用于在服务器中告诉hypervisor系统关于物理PCI设备运行的状态是否可用。 SR-IOV在操作系统层，现在能在所有的外围物理设备PF下，创建不只一个的虚拟功能设备（VFs）。VFs能共享外围设备的物理资源（像网卡端口或网卡缓存空间）并且与SR-IOV服务器上的虚拟机系统进行关联。SR-IOV能允许一个物理PCIe设备把自身虚拟为多个虚拟PCIe设备。[/collapse]三、基础环境以及软件安装Proxmox VE 5.4CPU:E5645*2网卡：intel 825763.1 软件安装安装基本的软件root@pve:~# apt update root@pve:~# apt-get install net-tools vim ethtool -y\3.2 打开IOMMU在/etc/default/grub文件里，GRUB_CMDLINE_LINUX_DEFAULT行添加以下内容那么使用vim打开文件，添加如果你是intel CPU。GRUB_CMDLINE_LINUX_DEFAULT=" intel_iommu=on pcie_acs_override=downstream"如果你是AMD CPU，那么添加一下内容：GRUB_CMDLINE_LINUX_DEFAULT=" amd_iommu=on pcie_acs_override=downstream"更新grubroot@pve:~# update-grub在/etc/modules文件里添加如下内容：使用vim打开/etc/modules，添加一下内容： vfio vfio_iommu_type1 vfio_pci vfio_virqfd更新并重启root@pve:~# update-initramfs -u -k all root@pve:~# reboot3.3 检查IOMMO功能是否开启root@pve:~# dmesg | grep -e DMAR -e IOMMU -e AMD-Vi [ 1.140539] DMAR: Host address width 40 [ 1.140626] DMAR: DRHD base: 0x000000fbffe000 flags: 0x1 [ 1.140740] DMAR: dmar0: reg_base_addr fbffe000 ver 1:0 cap c90780106f0462 ecap f020f6 [ 1.140865] DMAR: RMRR base: 0x000000000ed000 end: 0x000000000effff [ 1.140959] DMAR: RMRR base: 0x000000bf7ed000 end: 0x000000bf7fffff [ 1.141053] DMAR: ATSR flags: 0x0 [ 1.141445] DMAR: dmar0: Using Queued invalidation [ 1.141552] DMAR: Setting RMRR: [ 1.141911] DMAR: Setting identity map for device 0000:00:1a.0 [0xbf7ed000 - 0xbf7fffff] [ 1.142336] DMAR: Setting identity map for device 0000:00:1a.7 [0xbf7ed000 - 0xbf7fffff] [ 1.142711] DMAR: Setting identity map for device 0000:00:1d.0 [0xbf7ed000 - 0xbf7fffff] [ 1.143088] DMAR: Setting identity map for device 0000:00:1d.1 [0xbf7ed000 - 0xbf7fffff] [ 1.144741] DMAR: Setting id…

树莓派镜像制作
type: item
date: 2019-07-08T12:45:00+08:00
description: 因为需要4.19的内核，需要制作树莓派的img镜像，因此，就顺便编译一下树莓派3B+的内核，并制作成树莓派镜像。树莓派镜像制作一、树莓派介绍[collapse title="树莓派介绍" status="false"]树莓派由注册于英国的慈善组织“Raspberry Pi 基金会”开发，Eben·Upton/埃·厄普顿为项目带头人。2012年3月，英国剑桥大学埃本·阿普顿（Eben Epton）正式发售世界上最小的台式机，又称卡片式电脑，外形只有信用卡大小，却具有电脑的所有基本功能，这就是Raspberry Pi电脑板，中文译名"树莓派"。[/collapse]二、基础环境使用X86交叉编译需要10G的硬盘空间[scode type="blue"]本文使用的是ubuntu 16.04的系统[/scode]三、基础环境安装3.1 编译内核用的工具gcc[scode type="blue"]本文使用gcc-4.9下载地址：https://releases.linaro.org/components/toolchain/binaries/[/scode]3.1.1下载并配置gcc64位下载root@ubuntu16:~# wget https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/aarch64-linux-gnu/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz # 下载64位gcc root@ubuntu16:~# mkdir ~/toolchains # 创建文件夹 root@ubuntu16:~# tar xf gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz -C ~/toolchains/ # 解压缩 root@ubuntu16:~# cd ~/toolchains/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/ root@ubuntu16:~# echo 'export PATH=${PATH}:$(pwd)/bin' > env.sh # 创建环境变量 root@ubuntu16:~# source env.sh # 让环境变量在当前终端生效32位下载root@ubuntu16:~# wget https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/aarch64-linux-gnu/gcc-linaro-4.9.4-2017.01-i686_aarch64-linux-gnu.tar.xz # 下载32位gcc root@ubuntu16:~# mkdir ~/toolchains # 创建文件夹 root@ubuntu16:~# tar xf gcc-linaro-4.9-2017.01-i686_aarch64-linux-gnu.tar.xz -C ~/toolchains/ # 解压缩 root@ubuntu16:~# cd ~/toolchains/gcc-linaro-4.9.4-2017.01-i686_aarch64-linux-gnu/ root@ubuntu16:~# echo 'export PATH=${PATH}:$(pwd)/bin' > env.sh # 配置环境变量 root@ubuntu16:~# source env.sh # 让环境变量在当前终端生效3.2 安装依赖环境[scode type="blue"]依赖环境安装[/scode]root@ubuntu16:~# sudo apt install build-essential bison make debootstrap qemu-user-static kpartx util-linux vim git libncurses5-dev bc git dosfstools -y # 安装依赖 root@ubuntu16:~# sudo service binfmt-support start # 启动binfmt服务3.3 下载内核并配置3.3.1 下载内核root@ubuntu16:~# mkdir ~/kernel root@ubuntu16:~# cd ~/kernel # 创建文件夹并进入 root@ubuntu16:~# git clone https://github.com/raspberrypi/linux.git # 下载linux内核3.4 下载树莓派的…

使用OVS+Docker+quagga搭建BGP网络
type: item
date: 2019-07-01T12:16:00+08:00
description: 本文主要讲解使用quagga、Docker和quagga搭建简单的BGP网络。使用OVS+Docker+quagga搭建BUG网络首先对本次使用的技术进行一个简单的介绍，接着说明一下本次试验的环境，最后进行BGP简单网络的搭建。1. 简单介绍1.1 BGP网络介绍[collapse title="BGP网络介绍" status="false"]BGP(边界网关协议)主要用于互联网AS(自治系统)之间的互联，BGP的最主要功能在于控制路由的传播和选择最好的路由。中国联通 、中国电信、中国移动、教育网和一些大的民营IDC运营商都具有AS号，全国各大网络运营商多数都是通过BGP协议与自身的AS号来实现多线互联的。使用BGP协议互联后，网络运营商的所有骨干路由设备将会判断到IDC机房IP段的最佳路由，以保证不同网络运营商用户的高速访问。[/collapse]1.2 Docker介绍[collapse title="Docker介绍" status="false"]Docker 是一个开源的应用容器引擎，让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中，然后发布到任何流行的 Linux或Windows 机器上，也可以实现虚拟化。容器是完全使用沙箱机制，相互之间不会有任何接口。[/collapse]1.3 quagga介绍[collapse title="quagga介绍" status="false"]quagga软件原名是Zebra是由一个日本开发团队编写的一个以GNU版权方式发布的软件。它将linux机器打造成一台功能完备的路由器。Quagga支持的路由协议 Quagga能够同时支持RIPv1、RIPv2、RIPng、OSPFv2、OSPFv3、BGP-4和 BGP-4+等诸多TCP/IP协议。其中： RIPv1、RIPv2、OSPFv2适用于Ipv4的自治域系统内部网络路由协议。 BGP-4是用于Ipv4的自治域系统之间的外部网络路由协议。 RIPng、OSPFv3、BGP-4+主要扩展对Ipv6的支持。Quagga的特性 模块化设计：Quagga基于模块化方案的设计，即对每一个路由协议使用单独的守护进程。 运行速度快：因为使用了模块化的设计，使得Quagga的运行速度比一般的路由选择程序要快。 可靠性高：在所有软件模块都失败的情况下，路由器可以继续保持连接并且daemons也会继续运行。故障诊断不必离线的状态下被诊断和更正 支持Ipv6：Quagga不仅支持Ipv4，还支持Ipv6。Quagga的运行机制 由于Quagga采用模块化的设计，因此Quagga运行时要运行多个守护进程，包括ripd ripngd ospfd ospf6d bgpd 和Zebra。 其中，Zebra守护进程用来更新内核的路由表，而其他的守护进程负责进行相应路由选择协议的路由更新。Quagga的好处[/collapse]1.4 OpenVSwitch介绍[collapse title="OpenVSwitch介绍" status="false"]OpenvSwitch，简称OVS是一个虚拟交换软件，主要用于虚拟机VM环境，作为一个虚拟交换机，支持Xen/XenServer, KVM, and VirtualBox多种虚拟化技术。虽然是虚拟交换机，但是其工作原理与物理交换机类似。在虚拟交换机的实现中，其两端分别连接着物理网卡和多块虚拟网卡，同时虚拟交换机内部会维护一张映射表，根据MAC地址寻找对应的虚拟机链路进而完成数据转发。 OpenvSwitch是实现虚拟化网络的重要基础组件，在OpenStack中利用OpenvSwitch作为底层部件来完成虚拟网络提供和租户网络管理。OpenvSwitch可以实现访问控制功能，通过转发规则，可以实现简单的安全行为，包括通过、禁止等。[/collapse]2. 本次运行的环境2.1 系统环境Centos 7.6.18102.2 软件环境Docker 17.06【docker镜像为centos7】OpenVSwitch 2.5.8版本3. BGP网络搭建[scode type="blue"]3.1为首先准备BGP的一些基础环境，[/scode]3.1 BGP环境准备准备Docker和OVS3.1.1 安装Docker和OVS[root@localhost ~]#yum install docker-ce.x86_64 openvswitch.x86_64 -y #安装docker和OVS [root@localhost ~]#systemctl start docker [root@localhost ~]#systemctl start openvswitch #启动docker和OVS3.1.2 Docker…