这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

基础知识

主要关注linux领域的技能分享

1 - 网络篇

网络领域的基础知识分享

主要介绍网络领域的基础知识

1.1 - 内网机穿透开发

利用frp或者ngrok实现外网代理ssh到内网开发机

充分利用外网开隧道代理到本地服务,演示或者内网开发的利器,自己具备公网服务器的可以使用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,发起链接,即可通过外网访问本地服务,具体操作步骤如下:

  1. 进入ngrok官网(https://ngrok.com/),注册ngrok账号并下载ngrok;
  2. 根据官网给定的授权码,运行如下授权命令,会保存到在本地HOME目录
ngrok authtoken 2689y3MT2qsAois0MG****
  1. 发起本地服务1080端口的代理
ngrok http 1080 &

如上执行,可通过红色框访问本地1080端口服务,如果是要代理SSH的话,需要执行ngrok tcp 22 &

值得注意的是,每次运行命令都会重新生成新的域名地址,要想固定域名的话,需要付费。

总结

目前个人使用的方式,是利用frp建立ssh隧道,日常vscode远程开发,需要访问临时启动的服务的时候,利用ngrok随手启动即可访问到。

1.2 - 网络TCP/IP协议栈

介绍日常必备的网络基础

.TODO

1.3 - 混合云网络SDN

目前云上的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基础操作介绍

主要是本地环境搭建、日常使用技巧和linux性能方面的解读.

2.1 - Centos7 配置记录

记录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

    1. 添加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
  1. 安装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
  1. 启动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

记录定制化自己的linux内核和嵌入式硬件烧录引导的过程

.TODO