Minix 上的 AMD Lance 网卡驱动问题

今天在 Minix on VMware 上发现了一个奇怪的问题,使用静态 IP 地址以后,外部网络无法 ping 通 Minix,必须 Minix 先 ping 外面,然后外面才能 ping 通它。在 Google groups 上发现有人也遇到同样的问题:

I have Minix3 on a VMWare virtual machine … If I try to ping the box itself (192.168.1.134), I don’t get a reply unless I first ping the box back from the minix machine. I am running in bridged mode and I can get to the internet fine from the minix machine, but other machines cannot communicate with the minix machine unless the minix machine first communicates with the caller. Has anyone had similar issues? It is driving me crazy.

因为绝大多数人都在 VMware 上安装和运行 Minix,所以 Minix 上的 VMware 的网卡驱动尤其重要,至少重要性要高过其他网卡驱动。这里碰到的问题是由 Minix 上面 VMware 的模拟网卡驱动(AMD Lance NIC)造成的,lance 驱动必须被 load 在头 16MB 内存里,如果系统启动以后再 load 网卡的话会造成 lance 被 load 到 16MB 以外,造成驱动不工作。看到这里,马上就会想到如果事先 load 驱动的话(在 16MB 以内)就会避免上述问题,比如在加载文件系统以前?嗯,这是一个耍无赖的方法,但不是最好的。

在 Minix 3.1.5 上的解决办法是运行下面命令重新启动 lance 驱动:

# service refresh lance

在 Minix 3.1.3 上就比较倒霉了,会导致网卡驱动(lance)彻底不工作,不过这难不到众多使用 Minix 的 hacker 们,按照 comp.os.minix 上的这篇 Fix for Minix 3.1.3a, VMware, and Networking 可以在 Minix 3.1.3 上解决这个难题。

BibiHost:$9.95 512MB OpenVZ VPS

bibihost

BibiHost 是一家刚满一周岁的 VPS provider,去年2月份成立。根据这家 VPS 的配置和服务器所在位置,猜测又是一个 BurstNET 的 reseller,不过同样的配置 BurstNET VPS 只要5.95美元每月。他家的服务器为 FFmpeg hosting 做了专门的优化,带宽也比较充裕,特别适合做视频网站/博客的朋友。VPS 配置如下:

服务器在 Scranton
vePortal 控制面板
5GB 硬盘
512MB RAM
1000GB 带宽
100Mbps 网络速度
2个 IP
9.95美元

没有服务器配置信息。

DashingHost:$6.99 128MB OpenVZ VPS

dashinghost

DashingHost 官方网站的这款 Starter VPS 价格是12美元每月,使用优惠码:LowEndBox 后只要6.99刀每月。服务器在 Los Angeles,网络对亚洲地区的用户可能要快一些。域名显示 dashinghost.com 是2009年6月份注册的,比较新,他们家的 VPS 也不是很便宜,除了 VPS 外他们家什么都做,share hosting/reseller/dedicated 等。VPS 配置如下:

服务器在 Los Angeles CA
SolusVM 控制面板
5GB 硬盘
128MB Guaranteed/256MB Burst
150GB带宽
6.99美元

服务器配置信息:

The servers on which our VPSs are hosted use dual quad core Intel Xeon 5520 processors with 1 TB hard drives in RAID arrays and 24 GB DDR3 RAM, and are located in Los Angeles, California, USA. All of our servers offer 100 MBPS shared port speeds.

在 pfSense 上安装 DDclient

接着昨天的来,现在我们需要给我们刚建的小组内部网络设个动态域名以便外面可以用 ssh 等访问到内部的服务器,首先需要到 DynDNS.com 注册一个免费二级域名,然后在防火墙上安装动态域名客户端,每隔一段时间自动读取 ADSL 路由器的动态 IP 地址然后更新到 DynDNS.com 的域名服务就可以了。

pfSense 有自带的动态域名客户端,打开 pfSense 管理界面后配置 pfSense 自带的 Dynamic DNS 服务(pfSense->Services->Dynamic DNS),发现这个客户端有问题,只能在 save 的时候更新一次 IP 地址,不能自己自动更新 IP 地址,而且第一次提交的 IP 地址是内部的网络地址而不是我们想要的 ADSL 路由器对外的 IP 地址,google 了一下发现 pfSense 自带的动态域名客户端确实有问题:

Only works if pfSense is the public IP assigned to one of its interfaces. If you have a modem that gets your public IP and pfSense is a private IP, private IP address is registered with the provider.

解决办法是 disable pfSense 自带的 Dynamic DNS,安装第三方动态域名客户端 ddclient:

# pkg_add -r http://files.pfsense.org/packages/dns/ddclient-3.7.0.tbz
# cp /usr/local/etc/ddclient.conf.sample /usr/local/etc/ddclient.conf

# chmod +w /usr/local/etc/ddclient.conf
# vi /usr/local/etc/ddclient.conf
use=web, web=checkip.dyndns.com/, web-skip='IP Address'
server=members.dyndns.org
protocol=dyndns2
login=vpsee
password=your-password
vpsee.dyndns.org

修改完上面的 ddclient 的配置文件后,运行 ddclient 测试一下是否能运行:

# /usr/local/sbin/ddclient -daemon=0 -debug -verbose -noquiet

...
Can't load '/usr/local/lib/perl5/site_perl/5.8.8/mach/auto/Net/SSLeay/SSLeay.so' for module Net::SSLeay: Shared object "libssl.so.4" not found, required by "SSLeay.so" at /usr/local/lib/perl5/5.8.8/mach/DynaLoader.pm line 230.
 at /usr/local/lib/perl5/site_perl/5.8.8/IO/Socket/SSL.pm line 17
Compilation failed in require at /usr/local/lib/perl5/site_perl/5.8.8/IO/Socket/SSL.pm line 17.
BEGIN failed--compilation aborted at /usr/local/lib/perl5/site_perl/5.8.8/IO/Socket/SSL.pm line 17.
Compilation failed in require at /usr/local/sbin/ddclient line 1652.

上面错误显示缺少 libssl 库,这个好办,安装一个就可以了:

# pkg_add -r http://files.pfsense.org/packages/devel/openssl-stable-0.9.7l.tbz
# cp /usr/local/openssl/openssl.cnf.sample /usr/local/openssl/openssl.cnf

再次运行 ddclient 后无错误提示,运行成功:

# /usr/local/sbin/ddclient -daemon=0 -debug -verbose -noquiet

最后允许 ddclient 在后台(daemon)运行:

# vi /etc/rc.conf
ddclient_enable="YES"

登陆后 DynDNS.com 就会发现刚注册的二级域名的 IP 地址自动更新了:

dyndns domain

在 pfSense/FreeBSD 上安装 Squid

今年我们扯了一根自己的 4096 kbps ADSL 线路以便我们小组内部使用,不屏蔽端口,想访问什么就访问什么。为了同时访问工作网络和小组的网络,我们需要在不改变自己工作网络的网线和 IP 地址的情况下就能访问这根新的 ADSL 网络,所以需要在现有的工作网络上加一个 firwall/gateway 把 ADSL 和工作网络连接起来。简单的说我们现在有两套完全独立上网的网络,这样用户拿着笔记本进来插入工作网络网线就可以用工作网络上网,也可以改变代理服务器设置后用刚建的 ADSL 网络上网,或者不用网线,打开 WiFi 后直接进入 ADSL 所在的无线网络上网。下图中,如果 172.16.20.12 这台机器想上网,它可以使用 172.16.20.1 代理服务器通过工作网络上网,也可以通过使用代理服务器 172.16.20.10 通过 小组网络和 ADSL 上网。

小组:电话线 -- ADSL 路由器(10.0.0.1/8)
                 |
                 |
                 --------------  Firewall(10.0.0.2/172.16.20.10)
                                     |
                                     |
工作:Internet -- 路由器 -- 交换机 -- 工作网络(172.16.20.0/23)

为什么两个的网络要连起来呢?因为大家都不喜欢在网络之间切换,改 IP、网络设置、代理服务器等,很多时候大家需要同时在两个网络上,用工作网络(上网速度慢,很多端口被屏蔽,严格限制)访问内部所有的服务器,用新建的 ADSL 上网(网络速度快,没有屏蔽端口)。

要建这个 firewall/proxy/gateway 不需要很强大的硬件防火墙和服务器,所以 VPSee 决定把防火墙和 squid 服务安装在同一台机器上,节省资源。上个月对配置 Squid 服务器的硬件要求做了一些调查,接下来就是要在服务器上安装 Squid 服务。

pfSense 是一个基于 FreeBSD 的防火墙版本,从另一个 FreeBSD 防火墙 M0n0wall 发展而来,具有类似功能的 Linux 防火墙发行版本有 SmoothWall, Endian, IPCop, ClearOS, Untangle 等,试用了 一下 SmoothWall 发现非常简单易用,但是缺少一些我们需要的功能,SmoothWall 为了方便家庭用户使用把一些配置术语刻意简化了,比如配置网络的时候用到 Red/Green/Orange 让我摸不着头,我宁愿看到 nge0, bge0, eth0, 00:02:B3:CA:7B:92 等这些熟悉的术语,至少我能马上明白是什么意思。在测试 SmoothWall 的时候还遇到一些奇怪问题,比如启动了 DHCP 服务以后,客户端却不能及时得到 IP,要过几十秒钟,有时候甚至得不到 IP. pfSense 比 SmoothWall 强大很多,可自定义的模块很多,安装和配置第三方软件也很方便,使用起来特别顺手。

在 pfSense 上安装 Squid

安装 pfSense 过程很简单,这里省略,配置完 pfSense 网络接口后就开始安装 Squid,打开 pfSense 管理界面,在 System->packages 下面找到 squid 和 lightsquid(查看 squid 流量的工具)安装,成功后会在 Services 下看到 Proxy server 菜单,进去后可以配置 Squid 服务;在 Status->Proxy report 配置 Lighttpd 和查看 Squid 流量信息。
pfsense-squid

安装完 squid 后根据需要做一下配置,值得注意的是,默认安装后只有和这台 firewall/squid 服务器在同一个网段的机器才能通过这个 squid 访问 Internet,如果其他网段的电脑也想使用这个代理服务器的话除了在 Firewall: Rules 增加规则外,还需要在 Services->Proxy server: Access control 中增加网段到 Allowed subnets.

安装完 lightsquid 后要做如下配置:
1、配置 squid(Proxy server),enable /var/squid/log 路径;
2、配置 lightsquid(Proxy report)时需要点击 Refresh 按钮去创建 lightsquid reports,否则会得到一个出错页面。

在 FreeBSD 上安装 Squid

如果不用 pfSense,想在 FreeBSD 完整操作系统上安装 Squid:

# cd /usr/ports/www/squid
# make install

根据自己需要修改 squid.conf 配置文件:

# cp /usr/local/etc/squid/squid.conf.default /etc/squid/squid.conf
# vi /etc/squid/squid.conf

初始化 cache:

# /usr/local/sbin/squid -z

测试 squid 是否能正常运行:

# /usr/local/sbin/squid -NCd1

HostMist:$6 128MB OpenVZ VPS

hostmist

HostMist 成立于2008年9月,和大多数 hosting 提供商一样,HostMist 也是从 reseller 慢慢起步的,从2009年8月购买第一台独立服务器开始至今已拥有6台独立服务器,差不多每个月2台服务器的速度,扩张还是挺快的。服务器放在 wowrack.com,他家的 VPS 只有4种 Linux 可选:CentOS/Ubuntu/Slackware/Debian,VPS 配置如下:

服务器在 Seattle
SolusVM 控制面板
10GB 硬盘
128MB Guaranteed/192MB Burst
150GB带宽
6美元

服务器配置信息:

Quad Core Servers, Tier-1 Network

ServerPronto:$4.95 256MB Server

serverpronto

ServerPronto 有一款只要4.95美元的独立服务器,不同于 vpsee.com 上面介绍的其他基于各种虚拟技术 的 VPS,这可是实实在在的 real server. ServerPronto 成立于1999年,已经做了10多年,比较老牌了,专卖 dedicated server,尤其以低价闻名,管理着5000多台服务器,承诺提供 99.9% 的网络正常工作时间保证。不过要订购这款超级便宜的独立服务器需要耐心等待,要等到有货的时候才可以,“Waiting List Due to Limited Availability”,要等多长时间就不知道了。独立服务器+老牌提供商+低廉的价格,还等什么呢,VPSee 强烈推荐。服务器配置如下:

AMD 1800+
256MB DDR RAM
40GB 硬盘
10Mbps 连接速度
200GB 带宽限制
4.95美元

Delimiter USA:$9 256MB OpenVZ VPS

delimiter usa

Delimiter USA 有意思的是名字里有个 USA,服务器(至少一部分)和公司网站却在德国。域名是去年7月份注册的,还不到一年,不过网上评论挺多,正面评价偏多一些。他家的带宽没有限制,但是如果个人账号每个月都滥用超过几 TB 的话就可能就会被纪录下来并被限制使用。如果预付一年的话,还可以得到20%的优惠,也就是说只要86美元每年。VPS 配置如下:

服务器在 Germany
没有控制面板
20GB 硬盘
256MB Guaranteed/1024MB Burst
没有带宽限制
9美元

服务器配置信息:

Intel Core i710 920, Raid 1

监测 Xen 服务器的几个常用命令

安装完 Xen 服务器后,随着 Xen 虚拟机用户的增加,有必要经常查看一下 Xen 服务器(host)的状态,以及各个虚拟机(guest)的运行情况、占用的系统资源等。现在已经有很多针对 Xen 的监测工具可以使用,不过 VPSee 不主张滥用第三方工具,会增加 dom0 的负担以及带来安全隐患,保持简单(KISS),尽量用简单的工具做事情(不明白为什么有人写个便条还要用 Word,Notepad 就可以轻松搞定啊,这又让我想到了 Vi vs IDE~~)。VPSee 的几台 Xen 服务器只用来提供虚拟单一服务,dom0 只是为了提供硬件抽象、一个 hypervisor 层给 domU,所以应该尽量保持 dom0 的精简,同时也为了安全,不提倡在 dom0 上安装和运行任何不必要的软件。要监测 Xen 服务器的话最好就是用好一些 Xen 自带的命令行工具。

Top 是 Unix/Linux 中监测性能的重要工具,Xen 中也有 top,用来监测 host 和各 domains 的实时状态:

# xm top
xentop - 20:48:24   Xen 3.1.2-164.11.1.el5
10 domains: 2 running, 8 blocked, 0 paused, 0 crashed, 0 dying, 0 shutdown
Mem: 8388156k total, 7617344k used, 770812k free    CPUs: 2 @ 2814MHz
      NAME  STATE   CPU(sec) CPU(%)     MEM(k) MEM(%)  MAXMEM(k) MAXMEM(%) VCPUS NETS NETTX(k) NETRX(k) VBDS   VBD_OO   VBD_RD   VBD_WR S
SID
  Domain-0 -----r	1478    2.6     524412    6.3   no limit       n/a     2    6   648948    66380    0        0        0        0
  0
vm01 --b---        194    0.2     532352    6.3     540672	   6.4     1    1        0        0    1        0	 0
 0    0
vm02 --b---        211    0.2     532352    6.3     540672	6.4     1    1        0        0    1        0        0        0
   0
vm03 -----r	1685  106.4    1048440   12.5    1048576      12.5     2    1    26384    26900    2        0     6751    21520
  0
vm04 --b---	5255   20.6    2105216   25.1    2113536      25.2     1    1        0        0    1        0        0        0
  0
...

显示所有 domains 的运行状态信息:

# xm list
Name                                      ID Mem(MiB) VCPUs State   Time(s)
Domain-0                                   0      512     2 r-----   1457.3
vm01                                       1      519     1 -b----    191.9
vm02                                       2      519     1 -b----    208.9
vm03                                       8     1023     2 -b----   1666.1
vm04                                       9     2055     1 -b----   5100.9
...

显示所有 domains 的上线时间:

# xm uptime
Name                              ID Uptime
Domain-0                           0 20:30:40
vm01                               1 20:28:54
vm02                               2 20:28:48
vm03                               8  7:44:07
vm04                               9 20:28:34
...

显示 host 的信息:

# xm info

显示所有 domains 使用虚拟处理器的情况:

# xm vcpu-list
Name                              ID VCPUs   CPU State   Time(s) CPU Affinity
Domain-0                           0     0     0   r--    1392.3 0
Domain-0                           0     1     1   -b-      80.5 1
vm01                               1     0     1   -b-     194.1 any cpu
vm02                               2     0     1   -b-     210.6 any cpu
vm03                               8     0     1   -b-     901.8 any cpu
vm03                               8     1     1   -b-     770.8 any cpu
vm04                               9     0     0   -b-    5211.0 any cpu

显示某个 domain 使用的虚拟网卡信息:

# xm network-list vm01
Idx BE     MAC Addr.     handle state evt-ch tx-/rx-ring-ref BE-path
0   0  00:16:3e:24:c4:0b    0     4      12    768  /769     /local/domain/0/backend/vif/10/0

显示 xend 的日志:

# xm log

显示 xend 的 demsg 信息:

# xm dmesg

显示 host(node)的信息,和 xm info 类似:

# virsh nodeinfo
CPU model:           x86_64
CPU(s):              2
CPU frequency:       2814 MHz
CPU socket(s):       1
Core(s) per socket:  2
Thread(s) per core:  1
NUMA cell(s):        1
Memory size:         8387584 kB

显示某个 domain 的相关信息:

# virsh dominfo vm01
Id:             1
Name:           vm01
UUID:           8636724a-0369-4d18-ab92-969ad3a21bf6
OS Type:        hvm
State:          idle
CPU(s):         1
CPU time:       2992.5s
Max memory:     540672 kB
Used memory:    532352 kB
Autostart:      enable

显示某个 domain 使用的虚拟处理器信息:

# virsh vcpuinfo vm01
VCPU:           0
CPU:            1
State:          idle
CPU time:       2989.9s
CPU Affinity:   yy

Veeble:$4 256MB OpenVZ VPS

veeble

Veeble 这一款 VPS 在美国 Scranton PA 和德国的 Frankfurt 两地都租有服务器,同款 VPS 德国的要比美国贵1美元,可能是因为欧洲带宽较贵的缘故。域名显示这个 .org 的域名2009年9月才注册的,比较新的一家 VPS provider,提供 27/7 技术支持。VPS 配置如下:

服务器在 Scranton PA, USA 或者 Frankfurt, Germany
HyperVM 控制面板
10GB 硬盘
256MB Guaranteed/512MB Burst
100GB 带宽限制
4美元

没有服务器配置信息。