FreeBSD完全新手指南-----設置你的網路

火星人 @ 2014-03-12 , reply:0


  章內容
第一部分: 設置你的網路

設置你的網路

1. 配置網路界面
2. TCP/IP 介紹
3. Inetd, "超級"服務程序
4. 文件傳輸協議
5. 電子郵件
6. POP3 電子郵件
7. Windows 文件共享: SAMBA
8. Web Servers
9. 設置一個域名伺服器
10. 路由/網關
11. 防火牆
12. IP 網路地址轉化

1. 配置網路界面

一個網路界面就是一個使你能同你的網路通信的設備. 這些設備可以是一個網卡,
或者一個數據機, 或是其他各種各樣的使你能夠通信的設備. 這些設備需要進
行配置以便使網路能夠認出你是誰. 這些界面將用TCP/IP網路協議來配置. 通常在
/etc/rc.conf里配置, 或者/etc/sysconfig如果你用2.2.1或更老的版本.

2. TCP/IP 介紹

2.1 IP - Internet 協議
2.2 TCP - 傳輸控制協議

TCP/IP 是FreeBSD用來進行網路通信的協議. 當然, TCP/IP也是整個Internet
用來通信的協議, 這意味著FreeBSD也能用在Internet上. 本章試圖給你一個
TCP/IP協議的概貌和在一個TCP/IP網路上配置你的FreeBSD機器所需要了解的內容.

在我們向你對TCP/IP作足夠的介紹以使你能把它運行起來的同時, 如果你在維
護一個FreeBSD網路(或者任何類似的TCP/IP網路), 幾乎可以肯定你還要對TCP/IP
協議有更多的了解. TCP/IP是一個大的足夠用一整本書來描述的協議, 並且需要很
多人來完成! (恕我直言)有本很好的關於這個主題的書就是Craig Hunt所寫的
<>.由O'Reilly and Associates 出版. 這本書
有對TCP/IP的更具深度的描述並且覆蓋了很多本書僅簡單涉及的UNIX通用服務程序.
這本書在涉及配置文件等的時候會顯得有些過時, 但你仍能領會出其中的概念. 如
果你對(TCP/IP)協議本身很感興趣的話, Richard Stivens寫了從理論開始一直到
實踐知識的整整三卷書. <>已由Addison Wesley出版.

注意:

雖然FreeBSD也可以使用Apple-talk和IPX/SPX(Novell)協議, 但這並
不是FreeBSD所使用的標準協議,所以我們將把注意力集中到FreeBSD使
用的TCP/IP上.在本書的應用程序部分將看到如何使FreeBSD成為Apple
和Novell 文件/列印伺服器的替代品 - 我們在那裡將討論如何打開適
當的協議.

關於TCP/IP首先你需要知道的是它實際上是一族協議. 這一族協議使我們能把數據
從一台計算機傳到另一台 -- 一個源頭到一個目標 -- 而不知道數據在這段旅途上走
過的確切的路徑.有三個重要的部分你需要了解: IP, TCP, 和 UDP.

2.1 IP - Internet 協議

本質上說, IP 產生包(packets). 什麼是一個包? 一個包是一個小的數據"單元"
或"包".看下面的例子能使我們很容易理解包是什麼, 和IP怎樣來製造包. 假設你
有200k的數據要通過Internet傳給你的朋友. 你可以把這個文件想成是一個數據
的"流" - 這個文件有一個開始,和一個順序的位元組集合(這裡是200K個位元組)一直到
文件的末尾. 任何這樣的連續性的數據集合被稱作"流",由於數據據有方向性. 識
別數據流最關鍵的是集合里的位元組存在次序. IP 所做的就是把這些連續的數據流斷
開成為離散的包("packets")以使它們能夠被獨立發送. IP 把數據流切成一個個的包,
然後包裝這些包以使它們適合在Internet上傳送, 並且在包上標明源地址和目標地址.


2.2 TCP - 傳輸控制協議

有關IP剛才我所沒有告訴你的是, 很古怪的說, IP 是不可靠的. IP 並不保證某
個包能到達目的地, 或者全部包到達后再按原來的順序恢復成數據流. 這就是要有
TCP的原因. TCP 按正確的次序來還原包並且保證所有的包都到達目的地. 沒有
TCP, IP幾乎沒有用! 我猜這就是為什麼叫它們TCP/IP的原因!! :-)

有一個次序號藏在每個包的地址信息里. IP 發送每個包出去的時候遞增次序號,
而TCP用這些次序號把到達的包按正確的次序重新裝配起來. TCP 也用次序號來判
斷是否有包丟失. 如果某個包沒有出現(不正確的路由,等等原因)TCP會向源地址
請求再發一次這個包. 並且將保持重試直到所有的包湊成一個數據流. 因此,TCP
使得TCP/IP包傳送機制"可靠".

TCP還加入了IP所沒有提供的另一層次上的功能: 埠. IP 地址標識出網路上的
每台計算機, 而TCP 埠號標識出每台計算機上提供的每種服務. 埠號使得你
能同時運行很多種服務, 並且有一種機制保證每個請求能得到正確的服務. Web
伺服器也許是你最熟悉的一個例子. WWW服務程序通常運行在80埠上. IP地址
加埠號請求的標準形式是 IP:埠號 - 例如, 192.168.100:80 . TCP使我們
能夠同時向同一IP地址的Web 服務程序和telnet 服務程序(埠23)發送包.
太棒了!根據記錄, 埠號的範圍是 0 - 65000. 所有小於1024的埠號是有限
制的,意味著只有root有許可權開始一個監聽埠號小於1024的服務程序. 所有大
於1024的則可被任何用戶進程使用 - 不需要有root許可權.


3. Inetd, "超級"服務程序

正如我們先前揭示的, 一個FreeBSD系統能同時運行很多程序 - 對於FreeBSD
網路服務程序來說也一樣; 它將為你要提供的每一種服務運行一個程序. 問題是,
每個服務程序都會吃掉一大塊內存 - 而內存總是寶貴的. 解決方案是在收到請求
后啟動相應的服務, 而在發送完應答給產生請求的客戶機后又終止它. 然而一個服
務怎麼知道什麼時候該醒來呢?

這就是有inetd的原因. 它叫做 Internet "超級服務程序" 因為它控制著很多一
台典型的UNIX主機上存在的服務程序. inetd 監視著所有到達伺服器上的請求的端
口號. 當一個請求到達時, inetd 在/etc/services 里尋找服務的名字. 就象我們
能在下面看到的, services 文件是一個埠號和服務名稱的簡單映射:

(圖略)

在inatd知道了要啟動的服務的名字后, 它會在它的配置文件, /etc/inetd.conf
里查找配置信息,配置文件看起來象這樣:

(圖略)

該文件通常的格式是:
● 服務名稱
● socket 類型
● 協議
● {wait|nowait}[/max-child]
● 用戶
● 服務程序
● 服務程序參數

現在用一個具體的例子來說明它們分別代表什麼.

telnet stream tcp nowait root /usr/libexec/telnetd telnetd

第一個欄位,telnet,是服務的名稱. 這個名字必須和/etc/services里找到
的名字精確匹配. 第二和第三個欄位, stream tcp, 描述了該服務所產生的連接的類
型. 在這種情況下, tcp 將處理包的順序以使下載的信息成為無差錯的數據流. 本字
段另外僅有一個選項,dgram udp,指定用UDP,而不是TCP來處理包的順序(TCP/IP 里所
謂的"不可靠"數據報(datagram)).

第四個欄位,root,指定用來運行服務的用戶ID. inetd所啟動的大多數程序都以
"root"或"nobody"身份運行. 接下來的欄位告訴inetd在哪能找到要運行的程序, 和
任何要求的參數(在這個telnet 的例子里, 沒有任何參數).

注意:

通過inetd來運行程序的缺點是, 當一個服務被頻繁的運行,可能一
秒一次,或甚至一秒數百次的時候用它(inatd)不是很有效率. 你會
問為什麼? 通常用inatd來運行程序可以減小佔用的內存數量, 但這
帶來的懲罰是每當有請求到達的時候都必須"fork"程序. 簡單的說,
"fork" 意味著inetd要為服務啟動新的進程. 我們不打算詳細討論
fork一個進程所需要的額外開銷的技術細節. 而只是說會有一個額
外的開銷, 而在一個繁忙的系統上這足以導致一個可觀的延遲. 因
此一些服務以"deamons"形式而非"inetd"運行. 你決定如何運行一個
服務程序完全取決於你認為它的重要性. 如果性能是決定因素,使程
序成為一個daemon(即常駐內存). 如果想減少內存的開銷,則通過inetd
運行程序. 典型的, FTP,finger,talk,POP3,和telnetd通過inetd服
務程序來運行,但web servers 和郵件發送server(通常是sendmail)
是daemons.象NCSA和Apache之類的web Server甚至會事先"pre-forking"
幾份拷貝以消除請求的數量很多時forking產生的額外開銷! 如果你
安裝了一種新的服務, 附帶的文檔通常會告訴你最有效使用它的方法.


4. 文件傳輸協議

Not yet Scheduled

5. 電子郵件

Not yet Scheduled

6. POP3 電子郵件

Not yet Scheduled

7. Windows 文件共享:SAMBA

如果你用ports來安裝,則它把所有東西都裝在/usr/lcoal/samba/二進位文件放
在bin目錄里. 配置文件位於lib/smb.conf

如果是用package,它會把東西裝到/usr/local/sbin配置文件在
/usr/lcoal/etc/smb.conf. 要想知道如何創建smb.conf配置文件可以讀smb.conf
的man page. 這份關於smb.conf的文檔寫的很好也很全面. 你有可能會放到配置
文件里的每樣東西都包含在man page里了.要讀它,只需輸入:

man smb.conf

使用testparm來檢查你的配置文件. testparm 也會告訴你預設的配置文件在
哪裡.

不管你是如何安裝samba的, 你需要修改你的/etc/rc.local文件以使Samba在
系統啟動時啟動. 在你的rc.local里加入這兩行:

/usr/lcoal/sbin/smbd -D
/usr/local/sbin/nmbd -D

8. Web Servers

Not yet Scheduled

9. 設置一個域名伺服器

首先你要有一個有效的域名. 你需要在你註冊域名的地方給出你的主域名
伺服器的IP地址. INTERNIC或你上一級的DNS會把這些做好的.

如果你設置一個子域名, 你需要在你的域上建立一個映射指向那個域的主
域名伺服器.

首先:

在/etc/sysconfig文件,或者是新的/etc/rc.conf,加入一行:

namedflags="-b /etc/namedb.named.boot"

這將在系統啟動時啟動名字服務的Daemon, 並讓它把/etc/namedb/named.boot
作為配置文件.

現在進入/etc/namedb/目錄,然後輸入:

sh make-localhost

這將在目錄里創建localhost.rev文件. 所有的本地傳輸都需要這個文件.

現在創建或編輯named.boot文件

++++++++++++++NAMED.BOOT EXAMPLE ++++++++++++++++++++

;semi colons comment out statments.

; sortlist 128.3.0.0

; The sort list gives higher priority to certain domains in the case
;of multi-homed hosts.

directory /etc/namedb

; this denotes the directory that named should look to find all of the
; source files.

; type domain source host/file backup file

cache . named.root

; named keeps a cache of recently looked up hostname in the file mentioned.

primary 0.0.127.IN-ADDR.ARPA localhost.rev

; this is the local host entry needs to be there. Usually automatic.

primary Berkeley.EDU your.domain.zone
primary 32.128.IN-ADDR.ARPA your.domain.rev

; These lines are a pair. They represent the primary domain you control
; The first one is your domain and the second is the reverse lookup table.
; You need to have each DNS entry entered in to both files.
; You will need a pair of primary lines for each primary domain that
; you administer.

secondary Berkeley.EDU 128.32.130.11 128.32.133.1 ucbhosts.bak
secondary 32.128.IN-ADDR.ARPA 128.32.130.11 128.32.133.1 ucbhosts.rev.bak

; These lines are a pair also. They represent the domains that you are
; interested in knowing about if their DNS goes down. Or you may just be
; the back up DNS for them.

; Instead of source files, you specify the host that is the primary DNS
; for that domain. You must also specify that filename that named will
; store the temporary table in.
; You need a pair of these lines for each of the Domains that you are
; a secondary DNS for.
++++++++++++++++++++++End Example Named.boot File++++++++++++++++++

如果你有域"my.domain.com", IP地址的範圍是10.20.40 - 10.20.40.255,並且
需要一個主域名伺服器,你可以在named.boot文件里加入這幾行:

primary my.domain.com my.domain.com.zone

primary 40.20.10.IN-ADDR.ARPA my.domain.com.rev

現在需要製造primary source文件. 創建一個名為/etc/named/your.domain.zone
的文件(替換成你實際的域名). 它必須和named.boot里的primary段指定的文件名
匹配.

這是一個這樣的文件的例子:


IN soa bbcc.ctc.edu. root.bbcc.ctc.edu. (
28 ;serial
10800 ;refresh every 3 hours
900 ;retry every 15 minutes
604800 ;expire after a week
86400 ;minimum of a day
)
IN NS bbcc.ctc.edu.
IN NS ctc.ctc.edu.
IN NS bb.cc.wa.us.
bbcc.ctc.edu. IN A 134.39.180.254
mail IN CNAME bbcc.ctc.edu.
www IN CNAME bbcc.ctc.edu.
irc IN CNAME bbcc.ctc.edu.
bigbend.ctc.edu. IN CNAME bbcc.ctc.edu.
athena IN A 134.39.180.5
IN HINFO intel 586-133 winnt
proto IN A 134.39.180.6
aries IN CNAME bb.cc.wa.us.
sal IN A 134.39.180.8
dialup3 IN A 134.39.180.252
;end of file.


5)現在要產生主反向解析(primary reverse lookup)文件. 創建一個叫
/etc/named/your.domain.rev的文件.(替換成你實際的域名)

它必須和named.boot里的primary段指定的文件名匹配. 這是一個例子:


IN soa bbcc.ctc.edu. root.bbcc.ctc.edu. (
28 ;serial
10800 ;refresh every 3 hours
900 ;retry every 15 minutes
604800 ;expire after a week
86400 ;minimum of a day
)
8 IN PTR sal.bbcc.ctc.edu.
252 IN PTR dialup.bbcc.ctc.edu.



10. 路由/網關

Not yet Scheduled

11. 防火牆

Not yet Scheduled

12. IP 網路地址轉化

12.1. 1)裝入核心模塊
12.2. 2)設置NAT規則
12.3. 3)裝入NAT規則
12.4. 4)在網路界面間允許路由
12.5. 5)到子網的靜態路由
12.6. 6)確定你的網路界面已被配置

在裝完IpFilter后,你需要改動這三個文件:

/etc/rc.local

/etc/sysconfig

/etc/natrules

這是在FreeBSD 2.1.6-RELEASE上用ipfilter 3.1.4的測試.

12.1. 1)裝入核心模塊

如果你使用可裝入的核心模塊你必須編輯/etc/rc.local文件以使模塊在
啟動時被裝入.

用這一行: modload /lkm/if_ipl.o

如果沒有使用,跳過此步.

12.2. 2)設置NAT規則

產生一個叫/etc/natrules的文件並放入你的系統所需要的規則. 如果你要
使用整個10網路:

map fxp0 10.0.0.0/8 -> 208.8.0.1/32 portmap tcp/udp 10000:65000

下面是命令每一部分的解釋:

map 開始命令.

fxp0 是真實internet地址的界面

10.0.0.0 是要使用的子網

/8 子網掩碼, 就是 255.0.0.0

208.8.0.1 所使用的真實IP地址

/32 子網掩碼255.255.255.255, 僅使用此IP地址

portmap tcp/udp 10000:65000

整個網路都用此埠號來重定向tcp/udp調用.

12.3. 3)裝入NAT規則

每次計算機重新啟動時NAT規則都必須被裝入. 在你的/etc/rc.local文件里
放入這行: ipnat -f /etc/natrules

要檢查它是否已裝入,以root身份運行: ipnat -ls

12.4. 4)在網路界面間允許路由

告訴核心路由這些地址. 在/etc/rc.conf里加入:

Gateway=YES

或者在/etc/rc.local里加入:

sysctl -w net.inet.ip.forwarding=1

12.5. 5)到子網的靜態路由

現在要給子網加入靜態路由.編輯你的/etc/rc.conf, 在一個舊一些的系統
上是/etc/sysconfig.

static_routes="foo" route_foo="10.0.0.0 -netmask 0xf0000000 -interface 10.0.0.1"

12.6. 6)確定你的網路界面已被配置

我有兩塊Intel Ether Express Pro B網卡. 一塊是208.8.0.1另一塊是10.0.0.1
你需要在/etc/sysconfig里作如下配置:

network_interfaces="fxp0 fxp1"
ifconfig_fxp0="inet 208.8.0.1 netmask 255.255.255.0"
ifconfig_fxp1="inet 10.0.0.1 netmask 255.0.0.0"

注意:

當一台客戶機在虛擬網路上使用ftp時,要用passive模式.
否則在取目錄列表時會超時.





[火星人 via ] FreeBSD完全新手指南-----設置你的網路已經有84次圍觀

http://www.coctec.com/docs/unix/show-post-73997.html