CVM 操作记录

CVM 上的操作记录。

CentOS 7.2

ngrok 服务器搭建

可参考 imike 的CentOS下部署Ngrok服务器

  • 安装依赖库
1
2
sudo yum update
sudo yum install build-essential golang mercurial git
  • 获取 ngrok 源码
1
2
git clone https://github.com/inconshreveable/ngrok.git ngrok
cd ngrok
  • 生成证书并替换代码中默认证书,修改域名为解析到云主机的域名。
1
2
3
4
5
6
7
NGROK_DOMAIN="cross.forec.cn"
openssl genrsa -out base.key 2048
openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=$NGROK_DOMAIN" -out base.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
cp base.pem assets/client/tls/ngrokroot.crt
  • 编译:sudo make release-server release-client,编译结束后 bin 目录下会有 ngrokdngrok 两个可执行文件,对应服务器和客户端。
  • 不同系统使用的客户端需要重新编译
    • windows: sudo GOOS=windows GOARCH=amd64 CGO_ENABLED=0 make release-client
    • arm: sudo GOOS=linux GOARCH=arm CGO_ENABLED=0 make release-client
    • mac: sudo GOOS=darwin GOARCH=amd64 make release-client
  • 设置域名解析,增加记录 A,主机记录为 cross,记录值为云主机公网 IP。
  • 启动服务器,下面命令指定 http 端口映射到 8081https 映射到 8082。
1
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="cross.forec.cn" -httpAddr=":8081" -httpsAddr=":8082"

域名解析

http://blog.forec.cn 解析至 https://forec.github.io

  • 向解析列表添加一条 CNAME 记录,主机记录为 blog,记录值为 forec.github.io
  • 在 Github 博客仓库中根目录添加一个文件,文件名为 CNAME,文件内容为 blog.forec.cn

开启 IPv6

  • 新建 /etc/modprobe.d/ipv6.conf,添加 options ipv6 disable=0
  • 向自启动脚本添加 sysctl -w net.ipv6.conf.all.disable_ipv6=0
  • 重启,或直接运行上面的命令,观察 ifconfig 结果。

使用 tunnelbroker 分配 IPv6 地址

  • 在 tunnelbroker 注册,并分配一个 tunnel,填入 VPS 外网 IPv4 地址。
  • 在 tunnel 的 example configuration 选项卡下选择 Linux-route2,将生成的脚本拷贝到自启动脚本中。
  • 重启,观察 ifconfig,应增加一个 he-ipv6 网卡,并可看到对应 IPv6 地址。

Nginx 配置

  • 从官网获得 nginx 最新版本链接,wget 到本地
  • 安装编译依赖包: yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel
  • 安装 nginx 依赖包:yum install GeoIP gd libXpm libxslt
  • 编译、安装
1
2
3
4
5
tar -zxvf nginx-1.10.2.tar.gz
cd nginx-1.10-2
./configure
make
make install
  • /usr/local/nginx/sbin/nginx 运行,在浏览器输入 IP 观察是否显示欢迎页
  • /etc/profile 增加环境变量并 source /etc/profile 更新
1
2
PATH=/usr/local/nginx/sbin:$PATH
export PATH

为 Ngrok 做反向代理

  • 要令 monitor.cross.forec.cn 作为 ngrok 代理,该域名对应的 80 端口转发至本地 9999 端口。在 /usr/local/nginx/conf 增加配置文件 ngrok_monitor.conf
1
2
3
4
5
6
7
8
9
10
11
12
server{
listen 80;
server_name monitor.cross.forec.cn;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host:8081;
proxy_set_header X-Nginx-Proxy true;
proxy_set_header Connection "";
proxy_pass http://127.0.0.1:9999;
}
}

安装 MySQL

  • 腾讯云 CentOS 7.2 的 yum 源不提供 mysql-server
  • 下载 mysql 的 repo 源: wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
  • 安装源: sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
  • 安装 mysql :sudo yum install mysql-server
  • 启动 mysqld 服务:systemctl start mysqld.service
  • 修改密码:mysqladmin -u USER -p password PASSWORD 或使用 root 账户登入 mysql,执行
1
2
3
USE mysql;
UPDATE user SET password=PASSWORD('123456') WHERE user='root';
FLUSH PRIVILEGES;
  • 开机启动 mysqld 服务:systemctl enable mysqld.service

WordPress + Nginx 配置

1
2
3
4
5
6
7
8
9
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}

Nginx HTTPS 配置

  • 安装 openssl 和 openssl-devel:yum install openssl openssl-devel
  • 颁发证书
1
2
3
4
5
cd /usr/local/nginx/conf
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl rsa -in server.key -out server_nopwd.key
openssl x509 -req -days 365 -in server.csr -signkey server_nopwd.key -out server.crt
  • 增加配置文件 wordpress_https.conf,除下面部分,其它和 wordpress 配置文件相同
1
2
3
4
5
6
server {
listen 443;
sever_name forec.cn;
ssl_certificate /usr/local/nginx/conf/server.crt;
ssl_certificate_key /usr/local/nginx/conf/server_nopwd.key;
}

OpenVPN Server

  • 安装依赖并复制配置
1
yum install epel-release
yum install openvpn easy-rsa -y
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn
  • 编辑 /etc/openvpn/server.conf
1
2
3
4
5
6
dh dh2048.pem
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
user nobody
group nobody
  • 复制 rsa 配置
1
mkdir -p /etc/openvpn/easy-rsa/keys
cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
  • 编辑 /etc/openvpn/easy-rsa/vars
1
2
3
4
5
6
7
8
9
10
export KEY_COUNTRY="US"
export KEY_PROVINCE="NY"
export KEY_CITY="New York"
export KEY_ORG="DigitalOcean"
export KEY_EMAIL="sammy@example.com"
export KEY_OU="Community"

# X509 Subject Field
export KEY_NAME="server"
export KEY_CN=openvpn.example.com
  • 创建证书
1
cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca
./build-key-server server
./build-dh
cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
  • 为客户端创建证书
1
cd /etc/openvpn/easy-rsa
./build-key client
  • 设置路由
1
yum install iptables-services -y
systemctl mask firewalld
systemctl enable iptables
systemctl stop firewalld
systemctl start iptables
iptables --flush
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables
sed -n '0a net.ipv4.ip_forward = 1' /etc/sysctl.conf
systemctl restart network.service
  • 启动 openvpn

    1
    systemctl -f enable openvpn@server.service
    systemctl start openvpn@server.service
  • 配置客户端:将 /etc/openvpn/easy-rsa/keys/ca.crt/etc/openvpn/easy-rsa/keys/client.crt/etc/openvpn/easy-rsa/keys/client.key 拷贝到客户机,或者可以将其中的 key 包含到配置文件的 <ca></ca><cert></cert><key></key> 字段中。

  • 创建客户端配置文件 client.ovpn
1
2
3
4
5
6
7
8
9
10
11
12
13
client
dev tun
proto udp
remote your_server_ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
ca /path/to/ca.crt
cert /path/to/client.crt
key /path/to/client.key
  • 启动:sudo openvpn --config ~/path/to/client.ovpn
  • 结合客户端/服务器输出的错误信息,对双方配置文件再做调整。

原创作品,允许转载,转载时无需告知,但请务必以超链接形式标明文章原始出处(https://forec.github.io/2016/11/02/cloud-virtual-machine-config/) 、作者信息(Forec)和本声明。

分享到