Git 常用配置参数

Windows 开发环境:

# 忽略路径中的转义字符

git config --global core.protectNTFS false

# 禁用换行符转换

git config --global core.autocrlf false

CentOS7自动添加防火墙白名单

自动添加某域名对应的IP地址到防火墙里,允许此IP访问SSH服务

package main

import (
	"fmt"
	"net"
	"os/exec"
	"strings"
)

func main() {
	ip, err := net.ResolveIPAddr("ip4", "test.com")
	if err != nil {
		return
	}
	command, err := exec.Command("bash", "-c", "firewall-cmd --list-all").Output()
	if err != nil {
		return
	}
	if strings.Contains(string(command), ip.String()) {
		return
	}
	comm := `firewall-cmd --add-rich-rule='rule family="ipv4" source address="` + ip.String() + `" port port="22" protocol="tcp" accept'`
	_, err = exec.Command("bash", "-c", comm).Output()
	if err != nil {
		fmt.Println(err.Error())
		return
	}
}

Linux取消自动绑定ipv4端口

目前比较新的 Linux 发行版都有一个默认配置,就是在同时支持 IPV4 和 IPV6 的服务器上,监听 IPV6 地址端口的时候,系统会自动监听对应的 IPV4 端口。

# 查看 bindv6only 的值
cat /proc/sys/net/ipv6/bindv6only 

默认为0,就是自动绑定 IPV4 和 IPV6

取消自动绑定

sysctl -w net.ipv6.bindv6only=1
echo "net.ipv6.bindv6only = 1" >> /etc/sysctl.d/net-sysctl.conf

MacOS编译安装nginx

#!/bin/bash

curl -O http://nginx.org/download/nginx-1.16.1.tar.gz
tar zxf nginx-1.16.1.tar.gz

curl -O http://zlib.net/zlib-1.2.11.tar.gz
tar zxf zlib-1.2.11.tar.gz

curl -O https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
tar zxf pcre-8.44.tar.gz

cd nginx-1.16.1
sed -i '' 's/CFLAGS="$CFLAGS -g"/# CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
./configure --prefix=/usr/local/nginx \
--with-zlib=../zlib-1.2.11 --with-pcre=../pcre-8.44
--with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_sub_module \
--with-stream --with-stream_ssl_module --with-http_v2_module \
--with-http_mp4_module --with-http_secure_link_module --with-http_auth_request_module
make
sudo make install

QEMU虚拟化安装MacOS系统

需要的文件:

  1. 已转换过格式的 BaseSystem.img
  2. ESP.qcow2
  3. qemu-system-x86_64 >= 4.2.0
  4. UEFI 固件文件 OVMF_CODE.fd 和 OVMF_VARS-1024×768.fd

创建系统硬盘:

qemu-img create -f qcow2 system.qcow2 128G

创建虚拟机安装 MacOS 系统

qemu-system-x86_64 \
-enable-kvm \
-m 4G \
-machine q35,accel=kvm \
-smp 2 \
-cpu Penryn,vendor=GenuineIntel,kvm=on,+sse3,+sse4.2,+aes,+xsave,+avx,+xsaveopt,+xsavec,+xgetbv1,+avx2,+bmi2,+smep,+bmi1,+fma,+movbe,+invtsc \
-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" \
-smbios type=2 \
-drive if=pflash,format=raw,readonly,file=OVMF_CODE.fd \
-drive if=pflash,format=raw,file=OVMF_VARS-1024x768.fd \
-vga virtio \
-usb -device usb-kbd -device usb-tablet \
-netdev user,id=net0 \
-device e1000-82545em,netdev=net0,id=net0,mac=52:54:00:0e:0d:25 \
-device ich9-ahci,id=sata \
-drive id=ESP,if=none,format=qcow2,file=ESP.qcow2 \
-device ide-hd,bus=sata.2,drive=ESP \
-drive id=InstallMedia,format=raw,if=none,file=BaseSystem.img \
-device ide-hd,bus=sata.3,drive=InstallMedia \
-drive id=SystemDisk,if=none,file=system.qcow2 \
-device ide-hd,bus=sata.4,drive=SystemDisk \
-vnc 0.0.0.0:0,to=99,id=default

qemu命令转换为 xml 文件

virsh domxml-from-native qemu-argv macos.args

设置静态IPV6地址

现在联通的家用宽带网络基本上都已经支持 IPV6 了,在光猫下的所有设备都可以获取一个 IPV6 的地址,如果想设置每台设备都有自定义和静态的IPV6地址,需要满足以下条件:

  1. 设备连接光猫或者路由器,可以自动获取到一个IPV6地址
  2. 在光猫或者路由器设置页面可以查询到 IPV6 地址前缀

一般在光猫的设置页面可以查询到地址前缀(联通光猫后台,状态,网络侧信息,IPv6 WAN连接信息, 获取前缀 ),比如

# IPV6 Prefix
e145:910a:2222:5400::/60

然后在路由器的设置页面可以获取到 WAN 口的 IPV6 地址和前缀,比如:

# WAN IPV6
e145:910a:2222:5400:8475:1111:3900:2020/64

# IPV6 Prefix
e145:910a:2222:5401::/64

路由器 WAN 口的 IPV6 地址来自于光猫的 DHCPV6 自动分配

我们的网络设备连接到路由器的 LAN 口上,可以获取到路由器的 DHCPV6 分配的 IPV6 地址,比如:

e145:910a:2222:5401:2583:8567:3467:3467/64

设备分配到的 IPV6 地址的前四位是 IPV6 前缀地址,后面四位是根据设备的 MAC 信息生成(或者随机生成)的主机地址,所以我们可以修改后面四位地址来实现静态 IPV6 地址。

CentOS 7 修改方法:

nmcli con mod ens3 ipv6.addresses "e145:910a:2222:5401:0000:0000:0000:0001/128" gw6 "e145:910a:2222:5401::"
nmcli con mod ens3 ipv6.method manual

e145:910a:2222:5401:0000:0000:0000:0001/128
也可以简写为
e145:910a:2222:5401::1/128

gw6 后面跟的是 IPV6 网关,需要填写的是路由器获取到的 IPV6 前缀

然后重启系统,查看新的 IP 地址

reboot

ip a

文章出处:蘑菇博客 www.mogublog.net 转载需联系作者授权

KVM虚拟化安装OpenWRT

OpenWRT 有 X86_64 的版本,可以安装在 KVM 虚拟化平台上

OpenWRT 系统下载地址:
https://downloads.openwrt.org/releases/19.07.0/targets/x86/64/openwrt-19.07.0-x86-64-combined-ext4.img.gz

解压后导入到 KVM

gunzip openwrt-19.07.0-x86-64-combined-ext4.img.gz

virt-install --name=openwrt --vcpus=1 --ram=512 --os-type=linux --disk path=/kvm/disk/openwrt.img,bus=ide --autostart --network bridge=br0,model=e1000 --network bridge=br0,model=e1000 --import --noautoconsole --graphics vnc,listen=0.0.0.0,password=000000

安装完成后用 VNC 登录设置 root 用户密码和查看 IP 地址,如果是桥接网络,可以设置 lan 口自动获取IP

# /etc/config/network

config interface 'lan'
    option ifname 'eth0'
    option proto 'dhcp'

然后重启系统

创建私有CA证书签署自定义域名证书

一 创建 CA 证书

#!/bin/bash

mkdir CA
cd CA
openssl genrsa -out ca.key 4096
// openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=mogu/OU=CA/CN=mogu/emailAddress=admin@mogu.com"
echo "1" > serial

# Useage: sh createCA.sh

二 签名域名

#!/bin/bash

mkdir ${1}
cd ${1}
echo "[ req ]
default_bits       = 4096
distinguished_name = req_distinguished_name
req_extensions     = req_ext

[ req_distinguished_name ]
countryName                 = Country Name (2 letter code)
countryName_default         = CN
stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = Beijing
localityName                = Locality Name (eg, city)
localityName_default        = Beijing
organizationName            = Organization Name (eg, company)
organizationName_default    = www
organizationalUnitName            = Organizational Unit Name (eg, section)
organizationalUnitName_default    = IT
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_max              = 64
commonName_default          = ${1}

[ req_ext ]
subjectAltName = @alt_names

[alt_names]
DNS.1   = ${1}
" > san.conf

openssl genrsa -out ${1}.key 4096

openssl req -new -key ${1}.key -out ${1}.csr -config san.conf -sha256

# serial 唯一
serial=$(cat ../CA/serial)
openssl x509 -req -days 3650 -in ${1}.csr -CA ../CA/ca.crt -CAkey ../CA/ca.key -set_serial $((serial+1)) -out ${1}.crt -extfile san.conf -extensions req_ext
echo $((serial+1)) > ../CA/serial

# Useage: sh signDoamin.sh localhost

CentOS7使用Firewall屏蔽端口

1 安装 Firewalld

yum install -y firewalld

2 开启常用端口

firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent

3 特殊端口指定IP访问权限

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/16" port port="8080" protocol="tcp" accept'

4 只针对 IPV4 或者 IPV6 地址开放端口

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="443" protocol="tcp" accept'

5 重新加载防火墙规则

firewall-cmd --reload