前言

前面说到, 换到 RouterOS 确实系统启动快了非常多, 资源消耗也非常小, 但是又引出了几个新的痛点…

  1. ROS 的界面实在是不直观, 高情商: 专业, 低情商: 难看. 维护的过程中给自己增加了难度.
  2. ROS 的 DHCP 不能指定网关, 只能用 magle 标记做透明代理, 而不直观的问题又增加了配置和排查的难度 :(

此外感觉网络拓扑整的太复杂并没有什么卵用, 还是应该用奥卡姆剃刀剃一下, 这样出问题也好排查.

看了半天还是决定用主路由 OPNsense + 旁路由 OpenClash 分流. 主路由经过试用, OPNsense 似乎有更好的响应速度和易用性, 所以就用它踢掉 pfSense. OPNsense 有全面的 API 接口 , 方便做一些自动化的开发, 也不需要学 ROS 的语法.

而且, OPNsense有非常好看的前端界面!

因为实在受不了 pfSense 开机太慢而且 WebUI 巨卡 [1] , 和一些 DNS 设置奇奇怪怪的问题, 终于下定决心把主路由给换了. 调研使用了一波以后, 发现还是 RouterOS 可以比较相对简单地实现需求 (well, ROS 以复杂出名.. but [2] ), 那正好开坑写一个系列, 重组内网服务器.

  1. 虽说把 pfSense 给换了, 但是有一说一这是一个相对完善的路由系统 (而且本身就是防火墙系统), 首先他有内置的 DNS 解析服务, 还有非常好用的 DHCP 静态分配, 可以给每一个主机指定单独的 DNS 服务器和 Gateway, 这样可以把一些奇怪的职责解耦到不同的旁路由上 [3] , 然后对设备终端也是非侵入的. 可能以后如果需要对外暴露服务的话我还得把这个防火墙请回来..
  2. 跑通 ROS 其实不复杂… 网上那么多教程, 或者跟着官方 Getting Started 几分钟就行了. 主要是高级设置, 或者说中级功能没有其他路由系统直观, 要实现高级功能反而还是好用的 (用到在学嘛), 而且官方文档很全面.
  3. 虽说在 DHCP Static 上指定 Gateway 不用单独每个终端设备去设置, 但是导致服务器之间耦合在一起了, 如果某个服务挂了其实并不能简单快速地恢复. 所以这次的目标就是用好 ROS 的监听, 让主路由可以独立完成所有任务, 然后其他花里胡哨的功能外挂去做, 这些服务挂了可以自动切回 ROS 维持基本需求. 说不定哪天墙塌了, 我直接把旁路由一关! …

Download & Install

Download links: PVE, Rufus.

General Setups

Port Forwarding

Access web interface on port 443.

1
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8006

Startup Scripts

There is no rc.local file in PVE, but you can use crontab.

Edit file /etc/crontab, add a line:

1
2
@reboot root iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8006
# * * * * * root /also/support/user/scripts.sh

Removing an entire commit

1
git rebase -p --onto SHA^ SHA

Obviously replace SHA with the reference you want to get rid of. The ^ in that command is literal.

这里只列出了部分基础操作命令。

环境管理

  1. 查看所有环境
    1
    conda env list
    或者使用命令
    1
    conda info --envs
  2. 创建环境
    1
    conda create --name your_env_name
    或者使用命令
    1
    conda create -n your_env_name
    指定 Python 版本和安装包
    1
    conda create -n your_env_name python=3.5 numpy pandas
    克隆一部分旧的环境
    1
    conda create -n your_env_name --clone oldname

Before running this script, you’ll need:

  • The old email address that appears in the author/committer fields that you want to change
  • The correct name and email address that you would like such commits to be attributed to