基础知识
- 1: 网络篇
- 1.1: 内网机穿透开发
- 1.2: 网络TCP/IP协议栈
- 1.3: 混合云网络SDN
- 2: linux基础
- 2.1: Centos7 配置记录
- 2.2: 裁剪内核-BootLoader
1 - 网络篇
主要介绍网络领域的基础知识
1.1 - 内网机穿透开发
充分利用外网开隧道代理到本地服务,演示或者内网开发的利器,自己具备公网服务器的可以使用frp,不具备的可以使用ngrok。
FRP介绍
frp 是国人开源的一种快速反向代理,可将 NAT 或防火墙后面的本地服务器暴露到互联网上。目前,它支持暴露 TCP 和 UDP,以及 HTTP 和 HTTPS 协议,也可以通过域名将请求转发到内部服务。
安装
二进制下载地址, 解压后内容如下:
➜ frp_0.39.1_linux_amd64 tree
.
├── frpc
├── frpc_full.ini
├── frpc.ini
├── frps
├── frps_full.ini
├── frps.ini
├── LICENSE
└── systemd
├── frpc.service
├── frpc@.service
├── frps.service
└── frps@.service
1 directory, 11 files
可将其中的 frpc 拷贝到内网服务所在的机器上,将 frps 拷贝到具有公网 IP 的机器上,放置在任意目录。
后续使用思路:
- 编写配置文件,先通过 ./frps -c ./frps.ini 启动服务端,
- 再通过 ./frpc -c ./frpc.ini 启动客户端。
- 如果需要在后台长期运行,可使用压缩包内写好的的systemd服务
代理ssh
本人日常开发使用vsocde,众所周知,其remote SSH开发的特性非常惊艳,可以提供本地开发的体验,背后需要通过ssh连接到远端服务器,高配云主机价格不菲,公司电脑长期荒废中,,,,遂有了此想法,只购买一个低配的云主机用来代理到内网的公司电脑(已安装linux)上,然后利用vscode实现内网穿透开发。
服务端
外网云主机用作服务端的配置:
➜ ~ cat /etc/frp/frps.ini
# common为服务端基础配置
[common]
# 服务端监听的端口,用于和内网客户端建立通信,来接受需要代理服务的配置。
bind_port = 7380
# 服务端与客户端建立连接的Token,两边保持一致即可
token = PassWord
# 日志级别,默认的info,会打印很多被外网恶扫的连接信息
log_level = warn
启动:
frps -c /etc/frp/frps.ini
客户端
内网本地linux上,编写客户端配置:
# common为客户端基础配置
[common]
# 上例服务端运行的外网IP
server_addr = 39.*.*.*
server_port = 7380
token = PassWord
# 需要代理的服务配置,可以根绝自身情况开启多个代理服务如web、 后端api等。
[ssh]
type = tcp
# 本地服务信息
local_ip = 127.0.0.1
local_port = 22
# 配置服务端代理端口, remote 2222 -> local 22
remote_port = 2222
启动:
frpc -c ./frpc.ini
如上设置运行,可在任意机器上,通过 ssh -p 2222 root@39.*.*.*
登录内网机器。
vscode连接
安装正常步骤添加远端SSH机器,即可。
FRP总结
frp还有很多其他安全、UI、负载均衡等方面的配置,可根据自身环境选择,服务端和客户端选项更全面的配置见此
总体上使用frp代理简单的服务,配置上可以很简单,但要配置稍复杂的场景,目前的设计感觉有些缺陷,让人容易犯迷糊,比如设计多种端口字段,来开启某特性。
ngrok
针对个人免费的SaaS服务,需要注册账号,下载客户端,利用分配的token,发起链接,即可通过外网访问本地服务,具体操作步骤如下:
- 进入ngrok官网(https://ngrok.com/),注册ngrok账号并下载ngrok;
- 根据官网给定的授权码,运行如下授权命令,会保存到在本地HOME目录
ngrok authtoken 2689y3MT2qsAois0MG****
- 发起本地服务1080端口的代理
ngrok http 1080 &
如上执行,可通过红色框访问本地1080端口服务,如果是要代理SSH的话,需要执行ngrok tcp 22 &
。
值得注意的是,每次运行命令都会重新生成新的域名地址,要想固定域名的话,需要付费。
总结
目前个人使用的方式,是利用frp建立ssh隧道,日常vscode远程开发,需要访问临时启动的服务的时候,利用ngrok随手启动即可访问到。
1.2 - 网络TCP/IP协议栈
.TODO
1.3 - 混合云网络SDN
- TODO.
为什么需要SDN
- 网络可编程
- VPC(Virtual Private Cloud)
现有SDN方案
-
硬件方案(软件定义,硬件实现)
- 主流网络设备厂商有各自实现
-
软件方案(NFV)
- VMWare NSX, Juniper OpenContrail, OpenStack DVR...
业务需求
- 用户网络隔离 - 多租户
- 保证中等流量规模的高性能低延迟
- 适应复杂异构的基础架构(混合云-- kubernetes,虚机,裸机)
- 端点迁移,IP不变
- 负载均衡(L2/L3)
- 端到端流量精细ACL
- 可API控制
- 运维监控(包,字节流)
方案选型
- 成本
- 设备依赖
开源方案
各开源SDN方案对比:
-
flannel vxlan: 不具备网络隔离功能。
-
OpenShift SDN:
基于vxlan利用ovs-multienant可实现基于项目的网络隔离,和flannel vxlan相比,其使用的ovs-subnet插件,数据流场景大体一致,容器向外网发包也使用的NAT。
-
Calico:
支持混合云,安全加密, 纯3层的路由实现保证了性能和低延迟 支持了网络隔离和ACL 但存在目前只支持TCP、UDP、ICMP、ICMPv6协议,四层协议不支持。
-
OpenStack Neutron
支持网络隔离 性能和低延迟 -- 需要优化 支持多租户 基于ML2支持混合云方案 -- kubernetes的支持需要第三方的kubestack项目 虚机迁移,IP可不变,容器迁移,IP不变 -- 需要开发 支持负载均衡LBaaS 支持精细级的ACL API ? 可运维监控基本数据
-
OpenContrail
完全满足我们的网络需求, 值得深入研究
Juniper开源的SDN & NFV方案
已经集成支持OpenStack, VMware, Docker 和 Kubernetes.
各大厂商公开资料
- 网易蜂巢: VxLAN, 基于Openstack Neutron
- 待补充...
2 - linux基础
主要是本地环境搭建、日常使用技巧和linux性能方面的解读.
2.1 - Centos7 配置记录
- sshd 禁用DNS反向解析和GSSAPI认证,以完成快速登陆
sudo sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
sudo sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
sudo systemctl restart sshd
- 添加本地dvd源
mkdir -p /media/dvd && mount -t auto /dev/cdrom /media/dvd
cat <<EOF >/etc/yum.repos.d/CentOS-Base.repo
[c7-dvd]
name=Centos-7
baseurl=file:///media/dvd
enabled=1
gpgcheck=1
gpgkey=file:///media/dvd/RPM-GPG-KEY-CentOS-7
EOF
yum clean all
-
安装docker
- 添加yum源
sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
- 安装docker-engine
sudo yum install -y docker
或者下载离线rpm包(供网络环境差的环境使用)
sudo yum install docker --downloadonly --downloaddir=./
sudo yum localinstall ./*.rpm
3. 修改必要的docker daemon配置参数 现在不需要了,主要是devicemapper需要改下
sudo mkdir /etc/systemd/system/docker.service.d
sudo cat <<EOF >>/etc/systemd/system/docker.service.d/docker.conf
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --dns 180.76.76.76 --insecure-registry registry.cecf.com -g /home/Docker/docker -s overlay --selinux-enabled=false
EOF
- 启动docker
sudo systemctl enable docker
sudo systemctl start docker
# 普通用户放进docker组里,快速CLI
sudo usermod -aG docker [your_username]
-
firewalld
- 目前docker与firewalld存在兼容性问题
- 先选择关闭firewalld吧
-
安装ntp
yum install -y ntp systemctl start ntpd systemctl enable ntpd ntpdate -u cn.pool.ntp.org
-
必要组件
yum install net-tools bind-utils tcpdump lsof
-
查询本机的外网IP
curl ipinfo.io
2.2 - 裁剪内核-BootLoader
.TODO