webUI极大地降低了pfsense的使用门槛,但是它仅适合于初始化设置和日常维护,对于有排错或测试需求的用户来说,webUI远不如cli方便和快捷。譬如说想在ping的同时抓包[1]分析,由于两者在pfsense的Diagnostics菜单中是两个不同的功能项,所以需要在不同的界面中频繁切换,使用起来非常烦琐。这时候的cli就体现出它的优势,用户可以同时开两个窗口,一个用于ping,一个打开tcpdump,随心所欲。

pfsense支持ssh,此外pfsense的软件仓库还提供cli中两大杀手级的应用:tmux和mosh。简直就是左青龙、右白虎,老牛在腰间。

tmux

openbsd的一个随手之作,旨在取代screen,结果一不小心又成为*nix的标配。

mosh

MIT开发了一个旨在增强SSH的工具[2],支持漫游、间断性连接、智能本地回显,我最喜欢它的一点是:笔记本从休眠中唤醒后,休眠前的mosh进程(与远程的连接)立刻恢复到可用状态,无需重新连接。

在pfsense中,可通过pkg install来安装这两个软件,不过pfsense(2.3.3)有个bug,导致这两个软件都无法正常使用。错误的现象就是:

tmux的错误提示
[root@pfs-gw1.jkfz.qmcc]/root: tmux
tmux: need UTF-8 locale (LC_CTYPE) but have US-ASCII
mosh的错误提示(mobaxterm连接pfsense)
Starting MOSH server...
      - Local charset   : zh_CN
      - Remote charset  : zh_CN.UTF-8
      - Remote Server   : 10.9.1.19
      - Remote Username : chenrui
      - SSH port        : 22

Error starting mosh-server on remote server.
Output of server 10.9.1.19:

SSH Connection: 10.9.6.1 61405 192.168.111.19 22
The locale requested by LC_ALL=zh_CN.UTF-8 isn't available here.
Running `locale-gen zh_CN.UTF-8' may be necessary.

mosh-server needs a UTF-8 native locale to run.

Unfortunately, the local environment ([no charset variables]) specifies
the character set "US-ASCII",

The client-supplied environment (LC_ALL=zh_CN.UTF-8) specifies
the character set "US-ASCII".

LANG=zh_CN.UTF-8
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=zh_CN.UTF-8
Connection to 10.9.1.19 closed.

原因是一样的,缺少locale,不知为何,pfsense的/usr/share/locale/目录都是空的,解决的办法也很简单,那就是把freebsd10.3的locale分别拷贝到对应的pfsense目录中。

首先在一台linux[3]中下载locale,并上传到pfsense中:

linux
$ cd ~
$ axel -n 10 http://ftp.jaist.ac.jp/pub/FreeBSD/releases/i386/i386/10.3-RELEASE/base.txz (1)
$ xz -d < base.txz | tar -xvf - (2)
$ tar -hcf en_US.UTF-8.tar ./en_US.UTF-8 (3)
$ tar -hcf zh_CN.UTF-8.tar ./zh_CN.UTF-8
$ scp en_US.UTF-8.tar root@<pfsense>:/usr/share/locale/en_US.UTF-8/ (4)
$ scp zh_CN.UTF-8.tar root@<pfsense>:/usr/share/locale/zh_CN.UTF-8/
1 axel支持多线程下载,比wget快;
2 后缀txz的意思是使用tar打包后再用xz进行压缩,所以此处需要使用xz和tar两个工具结合方能解开txz文件;
3 tar中的-h表示将链接的源文件,而非链接本身;
4 <pfsense>为pfsense的主机名或ip地址。

接着在pfsense中将locale拷贝到相应的目录:

pfsense
$ sudo tar -xvf /usr/share/locale/en_US.UTF-8/en_US.UTF-8.tar
$ sudo tar -xvf /usr/share/locale/zh_CN.UTF-8/zh_CN.UTF-8.tar
$ sudo chown root:wheel /usr/share/locale/*

这时候pfsense的mosh和tmux就都可以正常工作了。

参考:https://forum.pfsense.org/index.php?topic=126076.0


1. pfsense的Package Capture,该功能基于tcpdump实现
2. 官网上的表述是SSH的替代品,然而实际运行的时候还是需要SSH
3. pfsense中没有wget或axel命令,所以只好曲线救国。当然也可以使用windows,只是对我来说,linux更方便些。