|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
Lintrack: 用于 ISP 的 Linux
Lintrack 是一款新的 GNU/Linux 分版,用于路由器,防火墙,网络访问服务器,以及更多方面。It features new approaches to 几个区域 比如系统配置及集成,但是很多主意来自于商业(还是翻译成:传统)的 Linux 分版。我愿意推荐给你这个项目,并提供 一步一步的指令把 Lintrack 配置成一个简单的 OSPF 骨干路由器和 PPPoE 网络访问服务器。
作者:Paweł Foremski
关于 Lintrack
Lintrack 起始于 2004 年,由 一个三人团队 开始开发。这个项目的原始动机是提供一个自由的,开源的操作系统,(无线)ISP 可以用来快速构建他们的网络架构。Nowadays there is an even stronger need for a free alternative to similar, but propertiary, operating systems, which are gaining high market share。
作为一个 Linux 分版,是什么使 Lintrack 这么特别?尽管只是另一个发布,但它的目的是带给开源世界一个高度集成、高度自动化的新东西。这意味着诸多传统的 GNU/Linux 分散的元素用一个单独的、全系统的配置结合在一起,表现为一个统一的管理接口。
安装
插图一:Lintrack 安装器
首先,我们需要获得 Lintrack 2.0 安装 CD - 你可以在该项目的网站上下载。在从这个 CD 启动你的目标机器之后,你会看到类似插图 1 所示的 Lintrack 安装器的欢迎消息。
大多数用户不需要输入任何内核参数,所以直接按 Enter 让安装器完成启动。启动之后,运行 'setup' 启动明文,纯文本安装程序。这个程序会问你几个问题以便将 Lintrack 安装到你的硬盘。
第一个问题 requests 目标分区的位置。在这里按 Enter 则会告诉安装器在第一个可用硬盘建立一个默认的分区。不需要交换分区。退出 cfdisk 之后,输入新分区的路径,并在询问是否格式化时回答 ‘YES’ ,然后是安装封包,大约要 5 分钟。
安装程序接下来会问你是否需要安装 GRUB 启动器。这个程序被安装在 MBR以便启动 Linux 内核。如果你打算使用,按下 Enter。
恭喜,你已经完成了 Lintrack 的安装。取出安装 CD 并运行'reboot'.
第一步
插图二 Lintrack 登录提示
当 Lintrack 第一次启动时,你会看到插图二所示的登录提示。使用缺省的用户名 root 和口令 asn 登录系统。
注:基于安全原因,你应该立即修改默认的口令。运行 'passwd' 修改口令。
Lintrack 使用Flatconf进行软件配置。Flatconf 把配置文件呈现为目录,把单个的选项呈现为文件。在本文中,我们将使用一个称为 fcc 的 Flatconf 接口:- root@venus:~# fcc
- Welcome to Flatconf CLI. Type "?" for help.
- venus.lan fc>
复制代码 我们用几个基本的 fcc 命令开始:
- ls - lists current directory
- cd - changes to another directories
- set - sets new value of an entry (variable)
修改 host name (Flatconf 中的 fc:/sys/hostname),步骤如下:-
- venus.lan sys> cd sys
- venus.lan sys> ls
- [dir] disks Disks
- [dir] ssl Certificates (OpenSSL)
- [dir] time Date and time
- [txt] hostname Host name
- `venus.lan’
- [txt] hostip Preferred host IP address
- `’
- [txt] sysloc System location
- `’
- [txt] sysmail System administrator e-mail address
- `’
- [dir] modules Kernel modules
- [fil] rc_local Local startup script (rc.local)
- venus.lan sys> set hostname “router1.lan”
复制代码 注意将新值括起来的引号。由于我们使用的是一个单字,引号不是必须的,但还是推荐使用引号。你不会看到主机名的改变,直到重新启动系统之后。现在不要重新启动,我们先调整几个更多的选项(译不通,怪了)。下面我们将设置手选的 IP 地址,物理主机位置的描述,以及你的 Email 地址。你可以安全地跳过后面两个,但是第一个选项很重要。-
- venus.lan sys> set hostip 192.168.1.1
- venus.lan sys> set sysloc “PL, Warsaw, ul. Jakas 13″
- venus.lan sys> set sysmail “[email]admin@theisp.com[/email]”
- venus.lan sys> ls
- [dir] disks Disks
- [dir] ssl Certificates (OpenSSL)
- [dir] time Date and time
- [txt] hostname Host name
- `router1.lan‘
- [txt] hostip Preferred host IP address
- `192.168.1.1‘
- [txt] sysloc System location
- `PL, Warsaw, ul. Jakas 13‘
- [txt] sysmail System administrator e-mail address
- `[email]admin@theisp.com[/email]‘
- [dir] modules Kernel modules
- [fil] rc_local Local startup script (rc.local)
复制代码 设置日期和时间,则输入 cd time。 这里你会注意到两个新的记录类型,bool ([0/1]) 和 select ([sel])。bool 类型仅接受 true 和 false 值;select 仅接受一个限制范围内的值。为显示所有可能的设置,输入 info timezone。这将输出大量可能的时区设置,所以现在是介绍自动完成的时候了。输入 'set timezone Europe/' (或 America,Asia,等等。)并按 Tab 键两次看看可能的选项。输入你想要的开始部分(比如:比如对 Warsaw 而言就输入 ‘War’)并再次按 Tab (译者:LINTRACK的时区也不全,我们应该选 Asia/Harbin,所以输入 Har 按TAB就可以了)。这被称为黑魔法 。-
- venus.lan sys> cd time
- venus.lan time> set timezone Europe/(Tab, Tab)
- Europe/Amsterdam Europe/Kiev Europe/San_Marino
- Europe/Andorra Europe/Lisbon Europe/Sarajevo
- …
- Europe/Istanbul Europe/Rome Europe/Zaporozhye
- Europe/Kaliningrad Europe/Samara Europe/Zurich
- venus.lan time> set timezone Europe/War(Tab)
- venus.lan time> set timezone Europe/Warsaw
复制代码 切换到 fc:/sys/ssl 目录。当前我们在 /sys/time 目录中。在典型的SHELL中,我们应该输入的是 'cd ../ssl',不过在 fcc 中,要用空格字符代替斜线(除了第一个)。-
- venus.lan time> cd .. ssl
- venus.lan ssl> ls
- [fil] ca_crt CA certificate
- [info] In .pem format
- [fil] host_crt Host Certificate (in .pem format)
- [info] In .pem format
- [fil] host_key Host Private Key
- [info] In .pem format
- [fil] dh1024 Diffie Hellman parameters
- [info] 1024 bits
- [act] genreq Generate new certificate request
复制代码 我们现在位于全局 SSL 配置目录。这些设置用于在 WPA,OpenVPN,IPsec IKE,及很多其它。。中的 EAP-TLS 验证,所以高度推荐你要设置正确。需要提供你的 CA 证书,并用你的CA签名的来新的替换自签名主机证书。然而我们还没有配置网络,所以现在只是这个过程。稍后在你用SSH连接上的时候你可以回到这里,这样你可以很容易的复制、粘贴所需的文件。现在如果你希望有多个 Lintrack 支持的路由器,能够互相安全的通信,你 will 需要配置正确的 SSL。如果你只是安装一个单独的 Lintrack 测试机,可以安全地跳过这步,使用自签名证书。
我们开始产生一个新的证书请求。注意标题为 “Generate new certificate request” 的 genreq 条目,这叫 action。这个条目类型为目录,尽管是一个你可以象配置任何其它的普通的 Flatconf 目录,也有一个 action script 与之关联。该脚本可以用 act 命令执行。相当简单:- venus.lan ssl> cd genreq
- venus.lan genreq> set cn router1.lan
- venus.lan genreq> set overwrite true
- venus.lan genreq> act
- —–BEGIN CERTIFICATE REQUEST—–
- …
复制代码 请求的证书写入了 fc:/sys/ssl/host_crt,私钥写入了 fc:/sys/ssl/host_key。你应该用你的 CA 签名,并在 ../host_crt 中提供结果,要完成这个,切换到父目录并输入进入 'set host_crt'。这会启动 vim,一个文本编辑器(可以用 $EDITOR 环境变量改为其他编辑器)。用已签名的证书替换旧的内容并保存。记住要用相同的方法更新 ca_crt 选项。
配置网络 - 大图
到目前为止,我们已经完成了基本的配置。过一会儿,我们会开始最重要的部分,不过首先,究竟 Lintrack 适合你的网络么?这通常依赖于你。这份 how-to 故意不做限制,你并不需要使用这里描述的所有功能。例如,插图 3 展示了一个可能的网络拓扑:
图三:网络拓扑示例
在上面的图中,我假定你已经配置了 Internet 网关机器和一个RADIUS 服务器为你的网络架构提供 AAA 服务。这两个服务在一个现存的 WISP 中是相当常见的。如果你没有 radius 服务器,我高度推荐使用 FreeRADIUS 和 ARA。或者,你可以在 PSK 模式下使用 WPA以及没有 RADIUS 服务器的本地 PPPoE 验证。
以太网设备
让我们从配置连接 Lintrack box #1 到网关主机的以太网卡开始吧。在 Lintrack 中,这是在 fc:/net/if/eth 目录中完成的。使用 cd 命令进入。列出目录内容,然后执行 scan 动作来显示系统启动过程中找到的以太网设备 ('act scan').
在目录列表中你会注意到一个新的要素类型,list ([lst]),它很重要,需要一点解释。一个 list 由其它条目(称作 list elements 或者只是 elements)按给定的顺序存储 。下面是一些可以在列表和元素上能够执行的可能的选项:
- add +list element - 给 +list 添加一个 element
- del element - 删除 element, 不论它属于哪个列表
- up|down element - 在列表中上下移动元素
- disable|enable element - 启用或禁用元素
- rename old new - 修改元素的名称
回到我们的任务,添加网络接口(eth0)到 +if list:-
- venus.lan ssl> cd / net if eth
- venus.lan eth> act scan
- Bus 00, device 03, MAC: 52:54:00:12:34:27 (currently eth0)
- venus.lan eth> add +if eth0
- venus.lan eth> ls
- [act] scan Show existing ethernet devices
- [lst] +if
- [dir] eth0
复制代码 注意 ls 输出中的附加 indenting(这个词什么意思?)。这告诉我们:eth0 是 +if 列表的一个元素。
关于元素的几点说明。 Element order, 大多数情形下,一个新元素的 matters 和名称应该是简单的,例如,无空白,字母数字 以及可选的 ‘-’, ‘_’, ‘#’, ‘:’ and single ‘.’ 中的一个。
如果需要,名称可以以后再改,但它在当前目录中必须是唯一的。Oh, and 如果你希望在 ls 命令的输出中看到已禁用的元素,使用 'ls -a' 。
现在切换到新目录中,看看里面是什么。有几个选型,但是我们仅对 “Interface description” 感兴趣。如果你希望在列出 fc:/net/if/eth 目录,或者使用 ifconfig/ip 工具时能看到一个易读的描述,设置它。现在我们切换到 ip 目录,在 eth0 接口上配置 IP:-
- venus.lan eth> cd eth0
- venus.lan eth0> set descr “To Gateway”
- venus.lan eth0> cd ip
- venus.lan ip> add +addr main
- venus.lan ip> set main addr 192.168.2.2/30
复制代码 以太网卡现在设置好了,考虑一些其它配置的可能性。在一个访问点连接到路由器 2 的情况下,有个问题需要我们讨论。如果我们在连接到 AP 的接口上设置了一个 IP 地址,并在它上面开启了 IP 转发(稍后我们会讨论它),那么用户可以用 PPPoE 协议访问 Internet 而不使用此前的验证。最好是,你的访问点应该能够重定向所有的l Ethernet 桢 received from the 无线基站 to 一个指定的硬件 (MAC) 地址 或 仅传送 PPPoE 通信。就后者而言,你已经做完了。否则配置你的 AP 传送所有通信到一个指定的 MAC。这是在设置接口的 IP 地址之后配置的。-
- venus.lan ip> cd .. vlan
- venus.lan vlan> add +mac clients0
- venus.lan vlan> set clients0 mac 52:54:00:98:76:54
复制代码 我们完成的是给以太网接口 添加 一个新的 MAC 地址并建立了一个新的,虚拟的,称为 clients0。 这些虚拟的接口被称为 MAC VLAN。注意我们没有在它上面配置 IP。如果你的 AP 没有上面的任何功能,则有两个选择:或者在连接到它的接口上禁用 IP 转发(并从 Lintrack box 上管理它),或者用防火墙限制 IP 转发(后面提到的)。
在后面的情形中,当你的客户直接连接到了你的以太网卡(router #3),不要在接口上设置 IP 地址。如果你的客户们用工作于 AP 模式下的无线网卡连接,则存在相同的情况。
Atheros 无线设备
配置无线卡。切换到 fc:/net/if/ath 目录并 list it。纠正 countrycode 选项(记住 info 选项)并执行 scan 动作以显示检测到的 AtheROS 卡。象前面一样,把你的接口(可能是 wifi0)添加到 +if list 并切换到新目录。
你可能想要改变 descr, channel 和 dist 选项,并启用一些 Atheros Super A/G 的功能 。不过首先,我们先获得一些你的(无线网)卡 的能力:-
- venus.lan wifi0> cd list
- venus.lan list> set caps true freq true
- venus.lan list> act
- athtmp2915=7782e40f…
复制代码 现在我们已经配置了 radio,可以在它顶部建立一个 real 网络接口,一个 VAP(虚拟访问点)。再一次,我们需要为 +if list 添加一个新元素。这一次,我们把它命名为 ath0。在你配置了它之后,进入新目录。
改变 mode 选项,或者为 sta 或者为 ap 并设置 essid。为了通信安全,切换到 wpa 子目录,然后 list it。如果你的 VAP 按 AP 运作,则设置 mode 为 server,否则把它设为 client。然后,在 pskpass 中设一个复杂的、长期密码以完成 WPA2-PSK 的设置。
如果你对 PSK 模式不满意,将 proto 设置为 eap-tls, eap-peap 或 eap-ttls 其中的一个。默认情况下,你会需要添加你的用户和他们的密码到 fc:/auth/wpa/phase2/+user list (除了 EAP-TLS),不过你也可以设置 auth 选项为 radius 并验证他们 them against your RADIUS 服务器(配置稍后讨论)。EAP 在客户模式下的配置是类似的,但请注意 login,pass 和 anonlogin 选项(在某些 EAP 模式中)。
PPPoE 服务器
Lintrack 项目自称拥有优越的支持 RADIUS 的 PPPoE。我们先验证下这是否属实。我们先需要启用 PPPoE 服务器:-
- venus.lan wpa> cd / net if pppoe server
- venus.lan server> set boot true
- venus.lan server> add +if eth0
- venus.lan server> set authmethod chap
- venus.lan server> set authsource radius
- venus.lan server> set ipsrc radius
复制代码 我们已经开启了 PPPoE 服务器,并设置成了系统起动时起动,为将启用服务的网络接口列表添加了 eth0,enabled a requirement that 密码已使用 CHAP 协议 加密,并告知服务器使用 RADIUS。如果你不想你的客户使用本地 DNS cache,记得要纠正 DNS 设置。
添加我们的 RADIUS 服务器:-
- venus.lan server> cd / auth radius
- venus.lan radius> add +server foobar
- venus.lan radius> cd foobar
- venus.lan foobar> set ip 192.168.2.6
- venus.lan foobar> set pass "supersecret123"
复制代码 最后,如果你希望使用一些额外的功能,应该把 ASN RADIUS dictionary 添加到你的 RADIUS 服务器。注意可以用于控制最大带宽(单位 kilobits/s)以及每秒封包速度的 ASN-Kbps-* 和 ASN-Pps 属性。
静态路由及 DNS
在我们的设想中,唯一需要开启静态路由的的路由器是 #1 路由器。这会使路由器意识到它应该通过 Gateway 机器连接到 Internet。运行 'set / net route quickgw 192.168.2.1' 启用它。
添加你的 DNS 服务器和本地域(如果你希望的话),如下:-
- venus.lan radius> cd / net dns
- venus.lan dns> add +servers 192.168.2.1
- venus.lan dns> add +search lan
复制代码 防火墙
在 Lintrack 中,防火墙使用 zones。考虑下我们所需要的区:
- inet - Internet;在我们的情形中为:网关主机 Gateway host
- backbone - 其他的 Lintrack 路由器和 network management traffic
- clients - 验证的客户
- public - publicly or easily accessible infrastructure, a 传输介质 for previous zone
每个区都需要 matches,比如:the information 如何连接到一个实际的 IP 通信 with a firewall zone。它可以匹配 IP 前缀,整个网络接口或者简单的使用一个 iptables 命令行的片段。注意:匹配是以 OR 操作符 连接在一起的。
我们看一下实际当中是如何在 1 号路由器上配置 inet 区的:-
- venus.lan dns> cd / net fw
- venus.lan fw> add +zone inet
- venus.lan fw> cd inet
- venus.lan inet> set descr "To Gateway"
- venus.lan inet> add +matches match1
- venus.lan inet> set match1 if eth0
- venus.lan inet> cd srv
- venus.lan srv> set forwarding on
- venus.lan srv> cd .. actions
- venus.lan actions> set clampmss true
复制代码 以上假定你已经用 eth0 连接到了 Gateway 机器,并且做了 masquerading,附加的防火墙,等等。如果你是直接连接到 Internet 并且只有一个小 LAN,你应该设置 forwarding 为 ‘to‘ (仅允许新的连接可以到该区),在 srv 中禁止一些服务,并在 action 目录中启用 masq 选项。
clampmss 选项可以使 TCP/IP MSS 参数被 path MTU 纠正。
现在设置 backbone 区。以相同的过程开始,不过这次记得要添加另一个 matches - 如:正确的 IP 前缀。在 srv 目录中,开启 forwarding, iperf, ospf 以及 snmp。不需要在 actions 中设置任何东西。-
- venus.lan fw> add +zone backbone
- venus.lan fw> cd backbone
- venus.lan backbone> set descr "Network backbone"
- venus.lan backbone> add +matches lintracks
- venus.lan backbone> set lintracks ip 192.168.1.0/24
- venus.lan backbone> add +matches management
- venus.lan backbone> set management ip 192.168.2.0/24
- venus.lan backbone> cd srv
- venus.lan srv> set forwarding on ospf true iperf true snmp true
复制代码 在配置 clients 区时有个你应该知道的秘诀。要匹配任何 PPP 接口(ppp0,ppp1,…),设置 if 选项为 ‘pppX‘。在 srv 中,设置 forwarding 为 ‘public‘ (如果你想要你的客户仅透过你的网络能够访问公共的 IP 地址;否则使用 ‘on‘ 设置) 并启用 dns。 在 actions 中,再次开启 clampmss 。-
- venus.lan fw> add +zone clients
- venus.lan fw> cd clients
- venus.lan clients> set descr "PPPoE clients"
- venus.lan clients> add +matches pppx
- venus.lan clients> set pppx if pppX
- venus.lan clients> cd srv
- venus.lan srv> set forwarding public dns true
- venus.lan srv> cd .. actions
- venus.lan actions> set clampmss true
复制代码 对于 public 区,我推荐设置 forwarding 为 ‘off‘ (或至少为‘to‘)并禁止所有的服务,除了 ICMP 和 SSH。如果你想要这个区成为默认的,那么在这之后为 +matches list 添加一个新元素,不要为它设置任何东西。也请记住在这种情形下,public 区只能是 fc:/net/fw/+zone list 的最后一个。-
- venus.lan fw> add +zone public
- venus.lan fw> cd public
- venus.lan public> set descr "Default rules"
- venus.lan public> add +matches all
- venus.lan public> cd srv
- venus.lan srv> set gre false ipip false ipsec false openvpn false
- venus.lan srv> cd .. ..
- venus.lan fw> ls
- [0/1] boot Start firewall at boot
- `true'
- [lst] +zone Zones
- [dir] inet To Gateway
- [dir] backbone Network backbone
- [dir] clients PPPoE clients
- [dir] public Default rules
- [lst] +dnat DNAT
复制代码 OSPF
Let’s enable simple OSPF:-
- venus.lan fw> cd / srv quagga
- venus.lan quagga> set boot true
- venus.lan quagga> cd ospf
- venus.lan ospf> set boot true
- venus.lan ospf> set area0 192.168.2.0/24
- venus.lan ospf> add +if ath0
- venus.lan ospf> set ath0 md5key "supersecretkey"
- venus.lan ospf> set authtype md5
- venus.lan ospf> set defaultgw true
复制代码 对于除了 #1 之外的所有路由器,跳过 最后的命令(它会导致路由器向其他 OSPF 路由器公告它自己是一个 Internet 网关),记得要纠正你的网络骨干 (area0)的 IP 前缀,并设置一个好的 MD5 密钥。
其他服务
一般而言,为你的客户启用 DNS 缓存是个好主意,所以我们启用它:-
- venus.lan ospf> set / srv dnsmasq boot true
复制代码 最后,如果你希望,你可以启用 SNMP 代理。例如,启用 SNMP v2c 如下所示:-
- venus.lan ospf> cd / srv snmpd
- venus.lan snmpd> set boot true
- venus.lan snmpd> add +community public
- venus.lan snmpd> set public source 192.168.2.0/24
复制代码 Conclusion
现在你可以用 quit 命令(或按 Ctrl+D)退出 fcc 了,然后重新启动你的机器。如果有什么问题,参考 Lintrack wiki 和 论坛。 Have fun!
The author would like to thank Jason ‘Xenophage’ Frisvold (blog) for proofreading and improving readability of this article.
======================================================================================
Access Point (AP) 就是访问点,或者接入点(不熟悉无线设备 )。
[ 本帖最后由 DreamCat 于 2007-6-10 21:35 编辑 ] |
|