把 OVA 虚拟机迁移到 Proxmox KVM 上

把 ova 解压,创建空虚拟机(不含磁盘),转换 .vmdk 格式为 qcow2,图形界面把磁盘绑定到虚拟机

# tar xvf xxxx.ova
设 vm ID 为 104, 虚拟机名称为 vpn-02,虚拟机类型为 Linux 
# qm create 104 --memory 1024 --net0 virtio,bridge=vmbr0 --name vpn-02 --serial0 socket  --bootdisk scsi0 --scsihw virtio-scsi-pci --ostype l26
设 导入的存储为  vmpool (名称), .vmdk 文件为 ova 文件解压后的虚拟机映像
# qm importdisk  104 ./VeeamPN-2.1.0.461-disk1.vmdk vmpool -format qcow2

这个虚拟机是 Veeam Power Network ,免费的 VPN 连接软件,但是导入到 Proxmox 后,Ubutu DHCP 不能自动起来,手工配置 IP 可以。 是因为 netplan 里的网卡配置的网卡硬件名写错了, 用 sed 修改后, DHCP 的 IP 就能自动启动了。
默认的 root 密码是 VeeamPN 。
然后 systemctl enable ssh 就可以开启 ssh , 进入 Web 界面按照用户手册来配置了。

WireGuard Ubuntu 上安装

$ sudo add-apt-repository ppa:wireguard/wireguard (Ubuntu 1910 之后不需要运行)
$ sudo apt install wireguard
$ sudo modprobe wireguard
$ sudo wg show

# 创建 Key Pair 
$ sudo -s
# cd /etc/wireguard; umask 077; wg genkey | tee privatekey | wg pubkey > publickey

服务器端,创建 /etc/wireguard/wg0.conf

[Interface]
PrivateKey = 私钥文本内容
# 服务器端 VPN VLAN 的 IP 地址,带掩码
# 确保 iptable 里面的 eth0 和自己使用的 网卡界面名一致
Address = 10.0.0.1/24, fd86:ea04:1115::1/64
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
SaveConfig = true

用 ufw 管理防火墙 ,并打开包转发

$ sudo ufw allow 22/tcp
$ sudo ufw allow 51820/udp
$ sudo ufw enable
$ sudo ufw status verbose
$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0
$ sudo wg show
$ cat << EOF >> /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
EOF
$ sysctl -p

以上为服务器配置完成,下面为客户端(可以是 Windows/Mac/iOS/Android等)创建配置文件:

先安装 qrencode 软件包, apt -y install qrencode,生成 png 文件发送给客户端扫码即可配置。

Todo: 部署客户端脚本

命令行下升级 Ubuntu 1904 到 1910

图形界面的升级就略过了,一台 kvm 虚拟机,之前跑 1904

$ lsb_release -a
$ sudo apt update && sudo apt dist-upgrade
$ sudo apt install update-manager-core
$ vim /etc/update-manager/release-upgrades
  修改 lts 为 Prompt=normal
$ sudo do-release-upgrade

中间会有一些交互问题,Yes/No,大概 半小时到一小时左右,升级就可以完成。最后一个 yes后,会自动重启。

[Windows]做一回自己电脑的明白人

Windows 7 已经停止更新,全球无数的 Windows 7 用户其实并不会随着微软的脚步而更新自己的硬件。Windows 10 对硬件的要求其实是很高的。 一般的 8G 内存的机器才能勉强胜任原来 Windows 7 4G 内存的机器,Win10 对 CPU 的要求更是让很多 Win7 用户抓狂。

怎样让自己的 Win7 跑得更快更安全?怎样确保之前卸载的软件,已经卸载干净?除了常规的三板斧,我们也需要明白 Windows 后面启动起来的资源。腾讯的电脑管家可以检测一部分不需要启动的服务以及任务,但是对于许多内核级的驱动,电脑管家无能为力。 Sysinternal 里有一个叫做 autorun 的工具,对于检查系统启动缓慢,可能的病毒加载是一个神器。当然使用这个工具,需要专业人员。非专业人员就算下载启动了这个工具,估计也是一头雾水。

下面的截屏,假定你已经下载并启动了 autorun,那么切换菜单里的 User ,分别检查 Logon Tab 里的内容,就可以看到每个用户(包括系统用户)可能启动的一些程序,其实你会非常震撼,原来你的系统启动了那么多乱七八糟的程序,你可以右键 Delete,或者直接按 Ctr-D 逐个删除。另外一个需要检查的地方是 “Drivers” tab,那里也是藏污纳垢之地,有些垃圾软件就是利用那个地方隐藏在系统的后面做一些龌龊的事情,例如 360,2345 之类的。当然,这些东西,你也不能乱删,最好先禁用,然后重启,如果重启正常,那就可以删除。 如果重启不正常,可以用 F8 , 恢复到上次启动正常,就可以继续启动,否则,需要用 Win PE 之类的工具修复。甚至重新安装 Windows 。

Ubuntu/Debian 修改任意 Mac 地址

有个叫做 macchanger 的软件包, 直接 apt install 即可

其实这个也是然并卵, ethtool -P eth0 就可以查看到物理 Mac 地址

有另外一篇文章说用 ethtool 就可以修改 eeprom 从而直接修改 Mac 地址。

然而, 这个需要 supports-eeprom-access = yes (运行 ethtool -i eth0), 如果网卡不支持的话,其实还是无解的。

至于其他办法用 dmidecode 等来获取 Mac 地址, 或许有效, 但是还不如 ethtool 直接。

结论, 要真的修改 Mac 地址,需要网卡支持,其他情况下,只是意淫修改一下 Mac 而已, 一条 ethtool -P 命令就能得到真实的 Mac 地址。(ethtool 是从 eeprom 里读取的)

用 qemu-nbd 命令 rescue Proxmox 下的 vm

一台 Ubuntu VM 修改了 vgname,启动不了了。 在 Proxmox 主机上,用以下命令挂接 VM 的磁盘:

# qm show 122 --pretty|grep drive // 查看 vmid=122 的磁盘路径
# modprobe nbd
# qemu-nbd -c /dev/nbd0 /mnt/pve/vmpool/images/122/vm-122-disk-0.qcow2
# fdisk -l // 验证 nbd 盘已经可以看到
# mount /dev/mapper/xingyun02-root /mnt
# chroot /mnt 

以上步骤就进入虚拟机根文件系统,直接可以对虚拟机操作了。 之后 umount , qemu-nbd -d ,然后 qm restart 120 就可以启动虚拟机了。

[How to] 怎样把 Proxmox 主机上的 USB 设备映射到虚拟机内

参考: https://pve.proxmox.com/wiki/USB_physical_port_mapping

把 USB 设备插入 PVE 主机后, dmesg 可以看到

假定虚拟机 ID 为 120,修改虚拟机配置文件: /etc/pve/qemu-server/120.conf,添加:

usb0: host=1-1.1.4

主机上 # qm stop 120; sleep 3; qm start 120 // 不是 qm restart
Ubuntu 的虚拟机内,默认 Kernel 没有 usbserial 模块,需要

sudo apt-get install linux-image-extra-virtual
sudo reboot
lsmod|grep usbserial
ls -al /dev/ttyUSB0

域名的价格-从 Godaddy 迁移到阿里云

FreeLAMP.com 是创始人徐永久自 2001 年开始就注册的域名,一直放在 GoDaddy 上,在创业之前,因为是注册了5年的域名,所以就一直放在 GoDaddy,这次终于要到期重新续费了。 GoDaddy 的价格是 3年 345 元,而阿里上的续费一个 .com 域名的价格是三年 207元,产品的竞争力可想而知。

域名和备案没有必然的关系,只有服务器主机在国内的运营商的,才需要备案。国内的备案不支持 .org 域名。其他 .org.cn, .com.cn, .net.cn 之类的基本都是假域名,可以忽略。中国的创新,从 .com.cn 迁移到 .cn 是非常快而高效的,你去看澳洲或者新西兰的 .com.au, 或者 .co.nz 其实一直在那里沿用,直接用 mydomain.au 或者 mydomain.nz 的域名很少,这些国家其实都是懒,不作为。

吐槽一下 GoDaddy 的域名管理界面,需要翻墙才能访问不说,界面十分的不好用,而且 API 的使用也十分的 Low。价格问题不是主因,是不接地气才是这些外企失败的原因。

如果是去拍卖一个域名,同样的域名,阿里上是 39.8k,而 GoDaddy 上要 41k

怎样在亚马逊 AWS 上申请12个月免费的 EC2

首先需要准备的物资:
1. 一张 Visa 或者 Master 的信用卡(说银联也可以)
2. 一个电子邮件(这是你 AWS 上的身份,每年可以换不同的邮件申请免费 EC2 )
3. 一个能接收验证码的手机(废话)

账号申请时,会问 Professional 还是 Personal,就选择 Personal 好了。然后填写个人地址,手机号码,然后填写信用卡号码,预扣1美元校验信用卡有效性。然后,信用卡银行会往你在银行登记的手机号码自动语音电话,让你确认境外交易。账号就算创建好了, 也会收到邮件提示。但是屏幕提示是需要24小时以内才会生效。也就是说,没有正式生效之前,是不可以开实例的。大概等了1-2个小时以后,就可以去开实例了。

开实例之前, 要首先选择 Region ,这个非常重要,一般选亚洲的,切换不同的区域, URL 的网址也会不一样,你 ping URL 里的域名,选择延迟比较小的就可以了。 我们就选择东京(Tokyo) 的区域,香港的区域是需要另外 Enable 的,懒得去 Enable 以免生成另外的费用。

之后就选择操作系统类型,我们选 Ubuntu 1804 普通版本,选 Free Tier 的 1G 内存, 1vCPU,8GB SSD*,然后把公网IP 地址和KeyPair 保存下来,等会儿要用到。接下来点击其中的 Security Group,为 Inbound Rule 添加tcp/udp 端口,默认只有 22 端口,根据自己的实际情况,开通对应的 tcp/udp 端口。

这样子一个基本的免费 EC2 申请就算完成了。

高级一点的,我们可以通过 aws-cli ,也就是在命令行下对实例进行操作。在右上角个人昵称的地方下拉,选择 My Security Credentials,然后创建 Access Key。把 Key 保存下来,在 aws-cli 就可以使用的。

要登录 Linux EC2 主机,我们需要 Windows 上安装 ssh 客户端,或者通过 Linux 主机登录,我们在 Windows 上安装了 Cygwin ,可以直接通过其中的 ssh 命令登录 EC2. $ ssh -i tokyo.pem ubuntu@52.195.x.x ,这样子就登录了, 然后 sudo -s 就可以成为超级用户,为所欲为了。

针对高级用户,接下来,我们把前面下载到的一个 Access Key 的 csv 文件记录下来。然后用以下命令配置好 profile,注意后面的 profile name “free_ec2” 可以随便取。

$ aws configure --profile=free_ec2

根据 CSV 里的 keyID 和 keySecret 粘贴,输入区域名:ap-northeast-1,就可以在 $HOME/.aws 下看到生成或者添加的 config 和 credentials 两个文件了。 我们写了一个简单的脚本,可以监控实例是否正常运行,如果有不正常的情况会报错。

#!/bin/bash
profiles=$(sed -n -e 's/\[\(.*\)\]/\1/p' credentials)
[ -z "$profiles" ] && exit 0
for P in $profiles; do
STATUS=$(aws ec2 describe-instance-status --profile $P|jq ".InstanceStatuses"|jq ".[]"|jq -r ".InstanceState.Name,.SystemStatus.Status"|paste -d ' ' - -)
[ "${STATUS}" != "running ok" ] && echo "Error: Something Wrong with AWS Instance! [$STATUS]"
done
$ vim /etc/hostanme
$ sudo apt upgrade
$ sudo reboot
$ sudo apt install kcptun shadowsocks-libev*
$ sudo snap install v2ray (this won't work due to apparmor issue)