在公司使用 Hyper-V 运行软路由的问题

在公司需要查阅资料和安装npm包,所以研究了几年虚拟机安装软路由进行代理访问的方法,期间得到很多虚拟化和网络方面的知识,记录一下几个比较经典的问题

本文不是教程,而是笔记

NAT网卡被强制指定IP

hyper-v 的lan(内部交换机) 会自动将宿主机的接口设置成固定IP(该交换机网端),代替DHCP

每次更改为DHCP后可以拿到软路由分配的IP,但是每次重启,又会变回手动指定IP,所以开机无网络。

可以在powershell里面用这个命令创建虚拟交换机来解决

查看

使用 restic 作为备份方式

restic是用golang编写的,只需要下载预编译文件放到环境变量即可

https://restic.net/#installation

使用前:

  1. 备份前先确定一个储存方式,restic支持本地文件系统备份,或者oss之类的云储存备份,还有ftp,sftp之类的
  2. 确定一个备份密码,你的备份会被加密储存,这个不可以跳过,希望你不要忘记你的备份密码
  3. 将储存方式写到环境变量,例如~/.bashrc 或者 ~/.profile中,例如本地储存
    1
    2
    export RESTIC_REPOSITORY="/backup/restic-repo"
    export RESTIC_PASSWORD="my@backup@password"
    或者 oss (记得替换方括号和尖括号的部分)
    1
    2
    3
    4
    export RESTIC_REPOSITORY="s3:https://[oss-cn-shenzhen.aliyuncs.com]/<bucket-name>/[path]"
    export AWS_ACCESS_KEY_ID="<ACCESS_ID>"
    export AWS_SECRET_ACCESS_KEY="<ACCESS_KEY>"
    export RESTIC_PASSWORD="my@backup@password"
    不要忘记执行 source ~/.bashrc 使变量生效,或者你退出终端重新进入也行
  4. 现在,你可以执行restic init 来初始化你的储存
  5. 备份一个路径很简单,使用 restic backup /data/my-path 或者 cd /data; restic backup my-path 都是等效的,在restic中一次备份快照将被绑定到3个数据维度,host+path+time 另外还有一个可选的tag
  6. 要在crontab中定时备份,请使用这样的格式,不然restic将会找不到储存
    1
    01 6 * * * . ~/.bashrc; restic backup /path/to/my-file

注意

restic不会去备份软连接的目标文件,例如你的/etc/nginx是从/usr/local/nginx/etc 链接的

当你执行restic backup /etc/nginx 后,你将只备份了一个软连接,而不是nginx的配置文件夹

区分同步和备份

  • 同步是类似mysql的主从同步或者简单的文件同步,将一份数据多地可用,实现减少延迟或是增加QPS

  • 备份用在数据损坏时恢复:例如黑客入侵,磁盘损坏,机房故障等情况

  • 备份需要可追溯历史,因为有些故障不是当时就发现的,
    例如你发现一个用户的资料页面显示了错误字符
    怀疑可能是一年前的某次错误操作导致的,需要那时候的原始数据来核对,这时候就需要寻找历史备份

  • 备份需要增量备份节省空间,如果无法增量,就无法保存太久的历史

  • 无法用同步代替备份主要是因为同步无法追溯历史,
    另一个原因是某些数据损坏具有传染性,例如黑客篡改数据,错误的数据将会传播到每一个节点

谨慎的使用 “同步+文件版本管理” 代替备份,因为备份的回溯邀请更加类似于“快照”,而不是“版本”

本地备份能实现回溯而不能防范另外两种数据损坏

多主互相同步实现的容灾意味着,更高的维护成本和更多的问题(冲突和同步延迟) 显然是得不偿失的

《syncthing》 - 文件同步软件

安装

ubuntu:

  1. apt install syncthing
  2. 下载最新版 syncthing 替换apt安装的老旧版本 https://github.com/syncthing/syncthing/releases
  3. systemctl enable syncthing@root and systemctl start syncthing@root
  4. 修改 ~/.config/syncthing/config.xml 的 gui->address 中的 127.0.0.1 为局域网IP, 访问http://<局域网IP>:8384
  5. 使用在本机开启ssh反向代理 ssh -LN 9999:localhost:8384 <远程地址>,然后在浏览器访问 http://127.0.0.1:9999

windows:

  1. 下载安装 https://github.com/canton7/SyncTrayzor#installation
  2. 启动 SyncTrayzorPortable-x64\SyncTrayzor.exe 这里一定要注意不要搞错了,
    如果启动的 syncthing.exe 那么配置文件位置不一样,后面再切换成 SyncTrayzor.exe 会丢掉之前的配置
  3. 右键托盘菜单选择配置,勾选最下方的“随开机启动”
  4. 本机在浏览器访问 http://127.0.0.1:8384

然后在页面配置同步

不要实时提醒

在2020年,各大APP厂商终于意识到了,一味的实时通知,其实不会更好
反而原始的邮件列表形式对用户更友好,
更能将信息可靠的给到用户,而实时的通知很容易被忽略。
因为现在各种各样的推送太多了,用户没有时间一一辨别,
很多就直接闭着眼睛点确认了,而且事后需要的时候又找不到这个信息。

现在,支付宝,钉钉,微信。淘宝之类的,都已经回归消息列表形式,例如异常登录,支付回执,物流更新等

但是国外的苹果还没有跟上,例如appleid的登陆确认,就还是即时消息形式,当你晚上有时间了想回头确认一下刚才那个提醒是否重要,可能是什么导致的,这时候你将没有任何凭证可以查询

我那毫无意义的工作啊~

今天上班后,老婆对我说加油💪!

我实在是加不起什么油,不过是按照开发文档按部就班不急不火的写些应付了事的代码,老板既不重视我的工作成果,也不愿意让我闲着,就随意糊弄找些无关紧要的工作内容让我做着,还一本正经的要我给出交付时间,保证按期完成工作。

但是我知道,如果老板心情好,也许会在拿到程序后花上三分钟看一下然后不再过问,但是业务部门拿到程序后,最多不过三五天,就会将我花费半个月或者一两个月开发的程序忘到脑后。
依旧刀耕火种的使用原始手段继续执行它们的业务,这彷佛就像你给野人部落送去一套现代农具被他们仍在角落,然后仍然使用木头石头和黄土搏斗。

就这样,直到下一次领导又惊觉IT部没有足够的工作量,又会开始下一轮的指挥业务部门想出一些轻浮的点子,交给IT部,开启新一轮的制造程序,扔进抽屉,再制造程序,再扔进抽屉。

每个半年或者一年,翻一翻抽屉,找出这些程序。大声说,这个功能不能用,不符合现在的业务现状,又或者说这个功能的需求提出者已经离职了,不知道这个功能是出于什么目的设计的,然后这个程序就被定义为垃圾,扔进垃圾桶

你能想象吗?,这几乎是在垃圾桶上方制作东西,制作完成后直接被扔进垃圾桶。我不知道拥有什么样的心态才能不敷衍了事的制作这些程序。

NAS的多媒体服务器

折腾过很多文件共享服务

文件列表类:

  • samba
    最经典的局域网文件共享方案
  • filebrowser
    有用户系统,支持上传下载

多媒体类:

  • plex
    看来是惊为天人,支持自动内网穿透,支持DLAN,支持UPNP自动映射
    nextcloud

文件管理类:
seafile

NAS服务器类
openmediavault
虚拟机群晖(全洗白)

NAS 的家庭网络到互联网漫游切换问题

最近两年热衷于折腾NAS,记录一下我尝试过的内外网切换的经验
这个问题是类似负载均衡自动切换线路的问题,但是比纯粹互联网上的负载均衡更加复杂,涉及到内外网切换场景下的最优线路选择
无论在DNS层面、路由器层面、还是应用层,都没法很好的解决

  • DDNS + 局域网Hosts 分别指向公网IP、内网IP的方案

    • 切换网络后,还有DNS缓存,有些手机需要切换飞行模式才会清空DNS缓存
    • 因为只切换IP,所以要求内外网使用同一端口,在外网80和443不通的情况下,内网也要用非80、443端口
  • VPN模式

    • 长期开着VPN耗电
    • 外网环境需要一直连着VPN,而回家后需要断开
  • 路由支持的端口映射走内网模式

    • 目前只看到梅林固件支持
  • 内外网使用不同IP/端口

    • nextcloud之类的客户端切换服务器地址等于连接到另外的服务器,操作麻烦,耗时久
  • zerotier 一类的P2P SDN软件定义网络

    目前看来很好用,内网外网切换毫无问题

用户系统设计准则

在开发和维护公司的一套系统两年后,对用户系统总结出了一点经验之谈

  • 不要存明文密码

    简单的md5,简单的sha1/sha256,固定的盐值,多层嵌套哈希,都不会提供额外的安全性
    参见:伯乐在线 - 蒋生武 加盐密码哈希:如何正确使用

  • HTTPS不是绝对安全

    如果你有额外的安全性需求,不要认为HTTPS是救世主

    1. 首次访问的HSTS剥离
    2. 证书泄露:网站的HTTPS证书泄露,导致中间人可以窃听流量
    3. 证书机构漏洞/错误颁发证书
    4. 本地病毒、流氓软件安装的证书
    5. 路由器去广告插件安装的证书
  • 不能仅凭登录态授权

    涉及到账户本身的操作,不能仅凭登录态来授权验证,例如“修改密码” “绑定/解绑手机”之类的操作,需要验证登陆密码或者二次验证,因为一旦用户流量被劫持,session或者token被盗取,黑客无法盗走账户,用户还可以通过更改密码取回自己的账号

查看

鄂ICP备14007840号-1