From c5f162fcf1a3cf15d3ef7e5f5727c64df2bfd5a0 Mon Sep 17 00:00:00 2001 From: Po Han Chen Date: Mon, 23 Mar 2026 12:54:35 +0800 Subject: [PATCH 1/3] handbook/zh-tw: translate network chapter --- .../zh-tw/books/handbook/network/_index.adoc | 926 ++++++++++++++++++ 1 file changed, 926 insertions(+) create mode 100644 documentation/content/zh-tw/books/handbook/network/_index.adoc diff --git a/documentation/content/zh-tw/books/handbook/network/_index.adoc b/documentation/content/zh-tw/books/handbook/network/_index.adoc new file mode 100644 index 00000000000..34a14822641 --- /dev/null +++ b/documentation/content/zh-tw/books/handbook/network/_index.adoc @@ -0,0 +1,926 @@ +--- +title: 章 7. 網路 +part: 部 I. 入門 +prev: books/handbook/wayland +next: books/handbook/partii +description: 本章深入介紹網路設定與效能的主題,展示 FreeBSD 作業系統強大的網路功能。 +tags: ["network", "ipv4", "ipv6", "wireless", "wpa_supplicant", "static ip", "dynamic ip", "WiFi"] +showBookMenu: true +weight: 9 +params: + path: "/books/handbook/network/" +--- + +[[network]] += 網路 +:doctype: book +:toc: macro +:toclevels: 1 +:icons: font +:sectnums: +:sectnumlevels: 6 +:sectnumoffset: 7 +:partnums: +:source-highlighter: rouge +:experimental: +:images-path: books/handbook/network/ + +ifdef::env-beastie[] +ifdef::backend-html5[] +:imagesdir: ../../../../images/{images-path} +endif::[] +ifndef::book[] +include::shared/authors.adoc[] +include::shared/mirrors.adoc[] +include::shared/releases.adoc[] +include::shared/attributes/attributes-{{% lang %}}.adoc[] +include::shared/{{% lang %}}/teams.adoc[] +include::shared/{{% lang %}}/mailing-lists.adoc[] +include::shared/{{% lang %}}/urls.adoc[] +toc::[] +endif::[] +ifdef::backend-pdf,backend-epub3[] +include::../../../../../shared/asciidoctor.adoc[] +endif::[] +endif::[] + +ifndef::env-beastie[] +toc::[] +include::../../../../../shared/asciidoctor.adoc[] +endif::[] + +[[network-synopsis]] +== 概述 + +本章深入介紹網路設定與效能的主題,展示 FreeBSD 作業系統強大的網路功能。不論是有線或無線網路,本章都提供了在 FreeBSD 上設定與調校網路連線的完整指南。 + +在深入細節之前,讀者最好先具備基本的網路概念,例如通訊協定、網路介面和定址方式。 + +本章涵蓋以下內容: + +* 在 FreeBSD 上設定有線網路的能力,包括網路介面的設定、定址方式和自訂選項。 +* 在 FreeBSD 上設定無線網路的技能,涵蓋無線網路介面的設定、安全通訊協定和疑難排解技巧。 +* FreeBSD 的網路功能以及其在網路效能方面的優異表現。 +* 了解 FreeBSD 支援的各種網路服務和通訊協定,並提供 DNS、DHCP 等設定說明。 + +更多進階網路設定的方法請參考 crossref:advanced-networking[advanced-networking,進階網路設定]。 + +[[config-network-setup]] +== 網路設定 + +設定有線或無線連線是 FreeBSD 使用者常見的工作。本節將說明如何辨識有線和無線網路介面卡,以及如何設定它們。 + +在開始設定之前,需要先知道以下網路資料: + +* 網路是否有 DHCP +* 若網路沒有 DHCP,要使用的靜態 IP +* 子網路遮罩 +* 預設閘道的 IP 位址 + +[TIP] +==== +網路連線可能已在安裝時透過 man:bsdinstall[8] 設定完成。 +==== + +[[config-identify-network-adapter]] +=== 辨識網路介面卡 + +FreeBSD 支援相當多種有線和無線的網路介面卡。請查閱所使用的 link:https://www.freebsd.org/releases/[FreeBSD 發行版] 的硬體相容性清單,確認該網路介面卡是否被支援。 + +要查看系統使用的網路介面卡,請執行以下指令: + +[source,shell] +.... +% pciconf -lv | grep -A1 -B3 network +.... + +輸出結果應類似如下: + +[.programlisting] +.... +em0@pci0:0:25:0: class=0x020000 rev=0x03 hdr=0x00 vendor=0x8086 device=0x10f5 subvendor=0x17aa subdevice=0x20ee + vendor = 'Intel Corporation' <1> + device = '82567LM Gigabit Network Connection' <2> + class = network + subclass = ethernet +-- +iwm0@pci0:3:0:0: class=0x028000 rev=0x00 hdr=0x00 vendor=0x8086 device=0x4237 subvendor=0x8086 subdevice=0x1211 + vendor = 'Intel Corporation' <1> + device = 'PRO/Wireless 5100 AGN [Shiloh] Network Connection' <2> + class = network +.... + +'@' 符號前面的文字就是控制該裝置的驅動程式名稱。在這個例子中分別是 man:em[4] 和 man:iwn[4]。 + +<1> 顯示廠商名稱 +<2> 顯示裝置名稱 + +[NOTE] +==== +只有在 FreeBSD 沒有正確偵測到網路介面卡時,才需要手動載入網路介面卡模組。 + +例如,要載入 man:alc[4] 模組,請執行以下指令: + +[source,shell] +.... +# kldload if_alc +.... + +另外也可以在 [.filename]#/boot/loader.conf# 加入下面這行,讓驅動程式在開機時以模組方式載入: + +[.programlisting] +.... +if_alc_load="YES" +.... +==== + +[[config-network-connection]] +== 有線網路 + +載入正確的驅動程式之後,就需要設定網路介面卡了。FreeBSD 使用驅動程式名稱加上編號來命名網路介面卡,編號代表該介面卡在開機時被偵測到的順序,或之後才被發現的順序。 + +例如,`em0` 是系統上第一張使用 man:em[4] 驅動程式的網路介面卡 (NIC)。 + +要顯示網路介面的設定,請輸入以下指令: + +[source,shell] +.... +% ifconfig +.... + +輸出結果應類似如下: + +[.programlisting] +.... +em0: flags=8863 metric 0 mtu 1500 + options=481249b + ether 00:1f:16:0f:27:5a + inet6 fe80::21f:16ff:fe0f:275a%em0 prefixlen 64 scopeid 0x1 + inet 192.168.1.19 netmask 0xffffff00 broadcast 192.168.1.255 + media: Ethernet autoselect (1000baseT ) + status: active + nd6 options=23 +lo0: flags=8049 metric 0 mtu 16384 + options=680003 + inet6 ::1 prefixlen 128 + inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 + inet 127.0.0.1 netmask 0xff000000 + groups: lo + nd6 options=21 +.... + +在這個範例中,顯示了以下裝置: + +* `em0`:乙太網路介面。 +* `lo0`:迴圈介面 (Loop interface) 是一種軟體迴路機制,可用於效能分析、軟體測試或本機通訊。更多資訊請參考 man:lo[4]。 + +範例中顯示 `em0` 已經啟用並在運作中。 + +主要的判斷指標如下: + +. `UP` 表示介面已設定完成且處於就緒狀態。 +. 介面擁有一個 IPv4 網際網路位址 (`inet`),為 `192.168.1.19`。 +. 介面擁有一個 IPv6 網際網路位址 (`inet6`),為 `fe80::21f:16ff:fe0f:275a%em0`。 +. 有一個有效的子網路遮罩 (`netmask`),其中 `0xffffff00` 等同於 `255.255.255.0`。 +. 有一個有效的廣播位址,為 `192.168.1.255`。 +. 介面的 MAC 位址 (`ether`) 為 `00:1f:16:0f:27:5a`。 +. 實體媒體選擇為自動選取模式 (`media: Ethernet autoselect (1000baseT )`)。 +. 連結狀態 (`status`) 為 `active`,表示已偵測到載波訊號。如果 `em0` 顯示 `status: no carrier`,表示乙太網路線沒有插入介面中,這是正常的。 + +如果 man:ifconfig[8] 的輸出如以下所示,則表示介面尚未設定: + +[.programlisting] +.... +em0: flags=8822 metric 0 mtu 1500 + options=481249b + ether 00:1f:16:0f:27:5a + media: Ethernet autoselect + status: no carrier + nd6 options=29 +.... + +[[config-static-ip-v4]] +=== 設定靜態 IPv4 位址 + +本節說明如何在 FreeBSD 系統上設定靜態 IPv4 位址。 + +網路介面卡的設定可以透過命令列使用 man:ifconfig[8] 來執行,但除非將設定加入 [.filename]#/etc/rc.conf#,否則設定不會在重新開機後保留。 + +[NOTE] +==== +如果網路在安裝過程中已經透過 man:bsdinstall[8] 設定過,可能已經有一些網路介面卡 (NIC) 的設定項目存在。在執行 man:sysrc[8] 之前,請先檢查 [.filename]#/etc/rc.conf#。 +==== + +可以執行以下指令來設定 IP 位址: + +[source,shell] +.... +# ifconfig em0 inet 192.168.1.150/24 +.... + +要讓設定在重新開機後繼續生效,請執行以下指令: + +[source,shell] +.... +# sysrc ifconfig_em0="inet 192.168.1.150 netmask 255.255.255.0" +.... + +執行以下指令來加入預設路由器: + +[source,shell] +.... +# sysrc defaultrouter="192.168.1.1" +.... + +將 DNS 紀錄加入 [.filename]#/etc/resolv.conf#: + +[.programlisting] +.... +nameserver 8.8.8.8 +nameserver 8.8.4.4 +.... + +然後執行以下指令重新啟動 `netif` 和 `routing`: + +[source,shell] +.... +# service netif restart && service routing restart +.... + +可以使用 man:ping[8] 來測試連線: + +[source,shell] +.... +% ping -c2 www.FreeBSD.org +.... + +輸出結果應類似如下: + +[.programlisting] +.... +PING web.geo.FreeBSD.org (147.28.184.45): 56 data bytes +64 bytes from 147.28.184.45: icmp_seq=0 ttl=51 time=55.173 ms +64 bytes from 147.28.184.45: icmp_seq=1 ttl=51 time=53.093 ms + +--- web.geo.FreeBSD.org ping statistics --- +2 packets transmitted, 2 packets received, 0.0% packet loss +round-trip min/avg/max/stddev = 53.093/54.133/55.173/1.040 ms +.... + +[[config-dynamic-ip-v4]] +=== 設定動態 IPv4 位址 + +如果網路上有 DHCP 伺服器,設定網路介面使用 DHCP 就非常簡單。FreeBSD 使用 man:dhclient[8] 作為 DHCP 用戶端。man:dhclient[8] 會自動取得 IP、子網路遮罩和預設路由器。 + +要讓介面使用 DHCP,請執行以下指令: + +[source,shell] +.... +# sysrc ifconfig_em0="DHCP" +.... + +也可以手動執行 man:dhclient[8]: + +[source,shell] +.... +# dhclient em0 +.... + +輸出結果應類似如下: + +[.programlisting] +.... +DHCPREQUEST on em0 to 255.255.255.255 port 67 +DHCPACK from 192.168.1.1 +unknown dhcp option value 0x7d +bound to 192.168.1.19 -- renewal in 43200 seconds. +.... + +如此便可確認使用 DHCP 取得位址是正常運作的。 + +[TIP] +==== +man:dhclient[8] 用戶端可以在背景執行。這可能會對依賴網路才能運作的應用程式造成問題,但在許多情況下能提供較快的啟動速度。 + +要讓 man:dhclient[8] 在背景執行,請執行以下指令: + +[source,shell] +.... +# sysrc background_dhclient="YES" +.... +==== + +接著執行以下指令重新啟動 `netif`: + +[source,shell] +.... +# service netif restart +.... + +可以使用 man:ping[8] 來測試連線: + +[source,shell] +.... +% ping -c2 www.FreeBSD.org +.... + +輸出結果應類似如下: + +[.programlisting] +.... +PING web.geo.FreeBSD.org (147.28.184.45): 56 data bytes +64 bytes from 147.28.184.45: icmp_seq=0 ttl=51 time=55.173 ms +64 bytes from 147.28.184.45: icmp_seq=1 ttl=51 time=53.093 ms + +--- web.geo.FreeBSD.org ping statistics --- +2 packets transmitted, 2 packets received, 0.0% packet loss +round-trip min/avg/max/stddev = 53.093/54.133/55.173/1.040 ms +.... + +[[network-ipv6]] +=== IPv6 + +IPv6 是廣為人知的 IP 通訊協定(也稱為 IPv4)的新版本。 + +IPv6 相較於 IPv4 有幾項優勢,也帶來了許多新功能: + +* 128 位元的位址空間可提供 340,282,366,920,938,463,463,374,607,431,768,211,456 個位址,解決了 IPv4 位址不足及最終耗盡的問題。 +* 路由器只需在其路由表中儲存網路聚合位址,將路由表的平均大小縮減到 8192 筆。這解決了 IPv4 的擴展性問題——過去每個已分配的 IPv4 位址區塊都必須在網際網路路由器之間交換,導致路由表過於龐大而無法有效路由。 +* 位址自動設定 (http://www.ietf.org/rfc/rfc4862.txt[RFC4862])。 +* 強制的多點傳播 (Multicast) 位址。 +* 內建 IPsec(IP 安全性)。 +* 簡化的標頭結構。 +* 支援行動 IP (Mobile IP)。 +* IPv6 到 IPv4 的轉換機制。 + +FreeBSD 包含了 http://www.kame.net/[KAME 計畫] 的 IPv6 參考實作,並已內建使用 IPv6 所需的一切。 + +本節著重於 IPv6 的設定與啟用。 + +IPv6 位址共有三種類型: + +單點傳播 (Unicast):: +送往單點傳播位址的封包會到達該位址所屬的介面。 + +任意傳播 (Anycast):: +這類位址的語法與單點傳播位址無法區分,但它們定址到一組介面。送往任意傳播位址的封包會到達最近的介面。 + +多點傳播 (Multicast):: +這類位址代表一組介面。送往多點傳播位址的封包會到達屬於該多點傳播群組的所有介面。IPv4 的廣播位址(通常是 `xxx.xxx.xxx.255`)在 IPv6 中以多點傳播位址表示。 + +讀取 IPv6 位址時,其標準格式為 `x:x:x:x:x:x:x:x`,其中每個 `x` 代表一個 16 位元的十六進位值。例如 `FEBC:A574:382B:23C1:AA49:4592:4EFE:9982`。 + +位址中經常會有很長的全零子字串。每個位址中可以用一個 `::` (雙冒號) 來取代一段連續的零。此外,每個十六進位值中最多可以省略前面三個 ``0``。例如,`fe80::1` 對應的完整格式是 `fe80:0000:0000:0000:0000:0000:0000:0001`。 + +第三種寫法是使用大家熟悉的 IPv4 表示法來寫最後 32 位元。例如,`2002::10.0.0.1` 對應的完整十六進位格式是 `2002:0000:0000:0000:0000:0000:0a00:0001`,也等同於 `2002::a00:1`。 + +要查看 FreeBSD 系統的 IPv6 位址,請執行以下指令: + +[source,shell] +.... +# ifconfig +.... + +輸出結果應類似如下: + +[.programlisting] +.... +em0: flags=8863 metric 0 mtu 1500 + options=481249b + ether 00:1f:16:0f:27:5a + inet 192.168.1.150 netmask 0xffffff00 broadcast 192.168.1.255 + inet6 fe80::21f:16ff:fe0f:275a%em0 prefixlen 64 scopeid 0x1 + media: Ethernet autoselect (1000baseT ) + status: active + nd6 options=23 +.... + +在這個範例中,`em0` 介面使用的是 `fe80::21f:16ff:fe0f:275a%em0`,這是一個從 MAC 位址自動產生的連結本地位址 (Link-local address)。 + +部分 IPv6 位址是保留的。保留位址的清單如下表: + +[[reservedip6]] +.IPv6 保留位址範例 +[cols="1,1,1", frame="none", options="header"] +|=== +| IPv6 位址 +| 說明 +| 備註 + +|`::/128` +|未指定位址 +|等同於 IPv4 的 `0.0.0.0`。 + +|`::1/128` +|迴圈位址 +|等同於 IPv4 的 `127.0.0.1`。 + +|`::ffff:0.0.0.0/96` +|IPv4 對應的 IPv6 位址 +|低位的 32 位元為 IPv4 位址,用於與 IPv4 主機和路由器相容。 + +|`fe80::/10` +|連結本地單點傳播 +|等同於 IPv4 的 169.254.0.0/16。 + +|`fc00::/7` +|唯一本地位址 +|唯一本地位址用於本地通訊,僅在一組合作站點之間可路由。 + +|`ff00::/8` +|多點傳播 +| + +|`2000::/3` +|全域單點傳播 +|所有全域單點傳播位址都從此範圍分配,前 3 個位元為 `001`。 + +|``2001:db8::/32, 3fff::/20`` +|文件用途 +|用於文件中的 IPv6 位址前綴。 +|=== + +更多關於 IPv6 位址結構的資訊,請參考 http://www.ietf.org/rfc/rfc4291.txt[RFC4291]。 + +[[config-static-ip-v6]] +=== 設定靜態 IPv6 位址 + +要將 FreeBSD 系統設定為使用靜態 IPv6 位址的 IPv6 用戶端,需要設定 IPv6 位址。 + +請執行以下指令來完成設定: + +[source,shell] +.... +# sysrc ifconfig_em0_ipv6="inet6 2001:db8:4672:6565:2026:5043:2d42:5344 prefixlen 64" +.... + +要指定預設路由器,請執行以下指令來設定其位址: + +[source,shell] +.... +# sysrc ipv6_defaultrouter="2001:db8:4672:6565::1" +.... + +要設定額外的 IPv6 任意傳播位址,請依照 man:rc.conf[5] 中的說明,將任意傳播位址指定為 `_aliasN`,並加上 `anycast` 選項: + +[source,shell] +.... +# sysrc ifconfig_em0_alias0="inet6 2001:db8:4672:6565::a anycast" +.... + +請注意,應用程式無法綁定到任意傳播位址;這種情況下需要改用別名位址 (alias address)。 + +[[config-dynamic-ip-v6]] +=== 設定動態 IPv6 位址 + +要透過 crossref:glossary[slaac-glossary,SLAAC] 動態設定介面的 IPv6 位址,請執行以下指令: + +[source,shell] +.... +# sysrc ifconfig_em0_ipv6="inet6 accept_rtadv" +# sysrc rtsold_enable="YES" +.... + +請注意,當啟用 IPv6 封包轉送(即 `ipv6_gateway_enable=YES`)時,除非將 man:sysctl[8] 變數 `net.inet6.ip6.rfc6204w3` 設定為 1,否則系統不會設定 SLAAC 位址。 + +=== 路由器公告與主機自動設定 + +本節示範如何在 IPv6 路由器上設定 man:rtadvd[8] 來公告 IPv6 網路前綴和預設路由。 + +要啟用 man:rtadvd[8],請執行以下指令: + +[source,shell] +.... +# sysrc rtadvd_enable="YES" +.... + +指定要在哪個介面上進行 IPv6 路由器公告是很重要的。例如,要讓 man:rtadvd[8] 使用 `em0`: + +[source,shell] +.... +# sysrc rtadvd_interfaces="em0" +.... + +接下來,建立設定檔 [.filename]#/etc/rtadvd.conf#,範例如下: + +[.programlisting] +.... +em0:\ + :addrs#1:addr="2001:db8:1f11:246::":prefixlen#64:tc=ether: +.... + +將 `em0` 替換為要使用的介面,`2001:db8:1f11:246::` 替換為分配到的前綴。 + +若是專用的 `/64` 子網路,則不需要更改其他設定。否則,請將 `prefixlen#` 改為正確的值。 + +=== IPv6 與 IPv4 位址對應 + +當伺服器啟用 IPv6 時,可能需要啟用 IPv4 對應的 IPv6 位址通訊。這個相容選項允許將 IPv4 位址表示為 IPv6 位址。允許 IPv6 應用程式與 IPv4 通訊(反之亦然)可能會有安全疑慮。 + +在大多數情況下可能不需要這個選項,它僅用於相容性。這個選項允許純 IPv6 的應用程式在雙堆疊 (Dual stack) 環境中與 IPv4 協作,對於可能不支援純 IPv6 環境的第三方應用程式特別有用。 + +要啟用這項功能,請執行以下指令: + +[source,shell] +.... +# sysrc ipv6_ipv4mapping="YES" +.... + +[[network-wireless]] +== 無線網路 + +大多數的無線網路是基於 link:https://en.wikipedia.org/wiki/IEEE_802.11[IEEE(R) 802.11 標準]。 + +FreeBSD 支援使用 link:https://en.wikipedia.org/wiki/IEEE_802.11a-1999[802.11a]、link:https://en.wikipedia.org/wiki/IEEE_802.11b-1999[802.11b]、link:https://en.wikipedia.org/wiki/IEEE_802.11g-2003[802.11g] 和 link:https://en.wikipedia.org/wiki/IEEE_802.11n-2009[802.11n] 運作的網路。 + +[NOTE] +==== +FreeBSD 目前正在開發 link:https://en.wikipedia.org/wiki/IEEE_802.11ac-2013[802.11ac] 的支援。 +==== + +基本的無線網路由多個工作站組成,使用 2.4GHz 或 5GHz 頻段的無線電進行通訊,不過實際頻段因地區而異,且也正擴展到 2.3GHz 和 4.9GHz 頻段。 + +設定無線網路有三個基本步驟: + +1. 掃描並選取存取點 (Access point) +2. 對工作站進行認證 +3. 設定 IP 位址或使用 DHCP + +以下各節將說明每個步驟。 + +[[network-wireless-quick-start]] +=== 快速連線到無線網路 + +將 FreeBSD 連接到現有的無線網路是很常見的情況。 + +這個快速入門程序說明使用基本認證方式連接到網路所需的步驟。更詳細的程序將在下一節說明。 + +第一步是向網路管理員取得無線網路的服務集識別碼 (Service Set Identifier, SSID) 和預先共用金鑰 (Pre-Shared Key, PSK)。 + +第二步是在 [.filename]#/etc/wpa_supplicant.conf# 中加入該網路的項目。如果檔案不存在,請建立它。關於此檔案的格式細節,請參閱 man:wpa_supplicant.conf[5]。 + +[.programlisting] +.... +ctrl_interface=/var/run/wpa_supplicant +eapol_version=1 +ap_scan=1 +fast_reauth=1 + +network={ + ssid="myssid" <.> + psk="mypsk" <.> +} +.... + +<.> 無線網路的 SSID。請替換為無線網路的名稱。 +<.> 無線網路的 PSK。請替換為無線網路的密碼。 + +第三步是加入網路介面的設定項目,讓網路在開機時設定好。使用 sysctl `net.wlan.devices` 來取得網路裝置介面。在以下的範例中,此 sysctl 的輸出顯示網路裝置介面為 "iwm0"。 + +[source,shell] +.... +# sysctl net.wlan.devices +.... + +輸出結果應類似如下: + +[.programlisting] +.... +net.wlan.devices: iwm0 +.... + +在接下來的 sysrc 指令中,如有需要請將 "iwm0" 替換為上述 sysctl 指令的輸出。 + +[source,shell] +.... +# sysrc wlans_iwm0="wlan0" +# sysrc ifconfig_wlan0="WPA DHCP" +.... + +* 最後一步是執行以下指令來重新啟動 `netif` 服務: + +[source,shell] +.... +# service netif restart +.... + +[[basic-wireless-configuration]] +=== 基本無線網路設定 + +本節提供設定無線網路卡更詳細的範例。要查看系統上有哪些無線網路卡,請參考 crossref:network[config-identify-network-adapter, 辨識網路介面卡] 一節。 + +[source,shell] +.... +# ifconfig wlan0 create wlandev iwm0 +.... + +要讓設定在重新開機後繼續生效,請執行以下指令: + +[source,shell] +.... +# sysrc wlans_iwm0="wlan0" +.... + +[NOTE] +==== +由於各地的無線電法規不同,因此需要正確設定適用於您所在地區的網域,才能取得可使用頻道的正確資訊。 + +可用的區域定義可在 [.filename]#/etc/regdomain.xml# 中找到。要在執行時設定資料,請使用 `ifconfig`: + +[source,shell] +.... +# ifconfig wlan0 regdomain etsi2 country AT +.... + +要保留設定,請將其加入 [.filename]#/etc/rc.conf#: + +[source,shell] +.... +# sysrc create_args_wlan0="country AT regdomain etsi2" +.... +==== + +[[scan-wireless-networks]] +=== 掃描無線網路 + +可以使用 man:ifconfig[8] 來掃描可用的無線網路。 + +要列出無線網路,請執行以下指令: + +[source,shell] +.... +# ifconfig wlan0 up list scan +.... + +輸出結果應類似如下: + +[.programlisting] +.... +SSID/MESH ID BSSID CHAN RATE S:N INT CAPS +FreeBSD e8:d1:1b:1b:58:ae 1 54M -47:-96 100 EP RSN BSSLOAD HTCAP WPS WME +NetBSD d4:b9:2f:35:fe:08 1 54M -80:-96 100 EP RSN BSSLOAD HTCAP WPS WME +OpenBSD fc:40:09:c6:31:bd 36 54M -94:-96 100 EPS VHTPWRENV APCHANREP RSN WPS BSSLOAD HTCAP VHTCAP VHTOPMODE WME +GNU-Linux dc:f8:b9:a0:a8:e0 44 54M -95:-96 100 EP WPA RSN WPS HTCAP VHTCAP VHTOPMODE WME VHTPWRENV +Windows 44:48:b9:b3:c3:ff 44 54M -84:-96 100 EP BSSLOAD VHTPWRENV HTCAP WME RSN VHTCAP VHTOPMODE WPS +MacOS 46:48:b9:b3:c3:ff 44 54M -84:-96 100 EP BSSLOAD VHTPWRENV HTCAP WME RSN VHTCAP VHTOPMODE WPS +.... + +. SSID/MESH ID 代表網路的名稱。 +. BSSID 代表存取點的 MAC 位址。 +. CAPS 欄位代表每個網路的類型以及在其上運作的工作站的功能(更多細節請參考 man:ifconfig[8] 中 `list scan` 的定義)。 + +[[wireless-authentication]] +=== 連線與認證無線網路 + +從掃描到的網路清單中選定無線網路後,接下來就要進行連線和認證。在絕大多數的無線網路中,認證是透過路由器上設定的密碼來進行的。其他方式則需要在資料流量傳輸前完成加密交握 (Cryptographic handshake),可能使用預先共用金鑰或密碼,也有更複雜的方案會使用如 RADIUS 等後端服務。 + +[[authenticate-wpa2-wpa-personal]] +==== 使用 WPA2/WPA/Personal 認證 + +無線網路的認證流程由 man:wpa_supplicant[8] 管理。 + +man:wpa_supplicant[8] 的設定會在 [.filename]#/etc/wpa_supplicant.conf# 檔案中進行。更多資訊請參考 man:wpa_supplicant.conf[5]。 + +完成無線網路掃描、選好網路並取得密碼 (PSK) 後,將這些資訊加入 [.filename]#/etc/wpa_supplicant.conf# 檔案,如以下範例: + +[.programlisting] +.... +network={ + scan_ssid=1 <.> + ssid="FreeBSD" <.> + psk="12345678" <.> +} +.... + +<.> SSID 掃描技術。只有在網路是隱藏的情況下才需要使用此選項。 +<.> 網路名稱。 +<.> 無線網路的密碼。 + +下一步是在 [.filename]#/etc/rc.conf# 檔案中設定無線連線。 + +要使用靜態位址,需要執行以下指令: + +[source,shell] +.... +# sysrc ifconfig_wlan0="inet 192.168.1.20 netmask 255.255.255.0" +.... + +要使用動態位址,需要執行以下指令: + +[source,shell] +.... +# sysrc ifconfig_wlan0="WPA DHCP" +.... + +然後執行以下指令重新啟動網路: + +[source,shell] +.... +# service netif restart +.... + +[NOTE] +==== +更多進階認證方式的資訊,可參考 crossref:advanced-networking[network-advanced-wireless,"進階無線認證"]。 +==== + +[[authenticate-open-networks]] +==== 連線到開放式網路 + +[TIP] +==== +使用者連接到沒有任何認證的開放式網路時,務必要**非常**小心。 +==== + +完成無線網路掃描並選定無線網路的 SSID 後,請執行以下指令: + +[source,shell] +.... +# ifconfig wlan0 ssid SSID +.... + +然後執行 man:dhclient[8] 來取得位址設定: + +[source,shell] +.... +# dhclient wlan0 +.... + +=== 同時使用有線和無線連線 + +有線連線提供較好的效能和穩定性,而無線連線則提供彈性和行動性。筆記型電腦使用者通常希望在兩種連線方式之間無縫切換。 + +在 FreeBSD 中,可以將兩個甚至更多的網路介面以「容錯」(Failover) 的方式組合在一起。這種設定會從一組網路介面中使用最佳且可用的連線,當連結狀態改變時,作業系統會自動切換。 + +連結聚合與容錯的說明請參考 crossref:advanced-networking[network-aggregation,"連結聚合與容錯"],同時使用有線和無線連線的範例請參考 crossref:advanced-networking[networking-lagg-wired-and-wireless,"乙太網路與無線介面的容錯模式"]。 + +[[hostname]] +== 主機名稱 + +主機名稱代表主機在網路上的完整網域名稱 (Fully Qualified Domain Name, FQDN)。 + +[TIP] +==== +如果主機沒有設定主機名稱,FreeBSD 會將其命名為 `Amnesiac`。 +==== + +[[get-hostname]] +=== 查看目前的主機名稱 + +可以使用 man:hostname[1] 來查看目前的主機名稱: + +[source,shell] +.... +$ hostname +.... + +輸出結果應類似如下: + +[.programlisting] +.... +freebsdhostname.example.com +.... + +[[change-hostname]] +=== 變更主機名稱 + +要變更主機的名稱並在重新開機後保留,請執行以下指令: + +[source,shell] +.... +# sysrc hostname="freebsdhostname.example.com" +.... + +[[dns]] +== DNS + +DNS 可以理解為一本 link:https://en.wikipedia.org/wiki/Telephone_directory[電話簿],將 IP 對應到主機名稱,反之亦然。 + +有三個檔案決定 FreeBSD 系統如何與 DNS 互動,分別是 man:hosts[5]、man:resolv.conf[5] 和 man:nsswitch.conf[5]。 + +除非在 [.filename]#/etc/nsswitch.conf# 檔案中另有指定,FreeBSD 會先查看 [.filename]#/etc/hosts# 檔案中的位址,然後再查看 [.filename]#/etc/resolv.conf# 檔案中的 DNS 資訊。 + +[NOTE] +==== +man:nsswitch.conf[5] 檔案指定名稱服務切換分派程式 (Name-service switch dispatcher, nsdispatch) 的運作方式。 + +預設情況下,[.filename]#/etc/nsswitch.conf# 的 hosts 區段如下: + +[.programlisting] +.... +hosts: files dns +.... + +例如,使用 man:nscd[8] 服務時,優先順序可以改為如下: + +[.programlisting] +.... +hosts: files cache dns +.... +==== + +[[local-addresses]] +=== 本地位址 + +[.filename]#/etc/hosts# 檔案是一個簡單的文字資料庫,提供主機名稱到 IP 位址的對應。連接到區域網路的本地電腦可以加入此檔案,用簡單的命名方式取代建立 DNS 伺服器。此外,[.filename]#/etc/hosts# 也可以用來提供常用網際網路名稱的本地紀錄,減少查詢外部 DNS 伺服器的需要。 + +例如,如果在本地環境中有一個 package:www/gitlab-ce[] 的本地實體,可以將以下內容加入 [.filename]#/etc/hosts# 檔案: + +[.programlisting] +.... +192.168.1.150 git.example.com git +.... + +[[configuring-nameserver]] +=== 設定名稱伺服器 + +FreeBSD 系統存取網際網路網域名稱系統 (DNS) 的方式由 man:resolv.conf[5] 控制。 + +[.filename]#/etc/resolv.conf# 最常見的設定項目如下: + +[.informaltable] +[cols="1,1", frame="none"] +|=== + +|`nameserver` +|解析器要查詢的名稱伺服器 IP 位址。伺服器依列出的順序查詢,最多三個。 + +|`search` +|主機名稱查詢的搜尋清單。通常由本地主機名稱的網域決定。 + +|`domain` +|本地網域名稱。 +|=== + +一個典型的 [.filename]#/etc/resolv.conf# 如下: + +[.programlisting] +.... +search example.com +nameserver 147.11.1.11 +nameserver 147.11.100.30 +.... + +[NOTE] +==== +`search` 和 `domain` 選項只能擇一使用。 +==== + +使用 DHCP 時,man:dhclient[8] 通常會用從 DHCP 伺服器收到的資訊來改寫 [.filename]#/etc/resolv.conf#。 + +[TIP] +==== +如果正在設定的機器*不是* DNS 伺服器,可以使用 man:local-unbound[8] 來改善 DNS 查詢效能。 + +要在開機時啟用它,請執行以下指令: + +[source,shell] +.... +# sysrc local_unbound_enable="YES" +.... + +要啟動 man:local-unbound[8] 服務,請執行以下指令: + +[source,shell] +.... +# service local_unbound start +.... +==== + +[[troubleshooting]] +== 疑難排解 + +在排解硬體和軟體設定的問題時,先從簡單的地方檢查起。 + +* 網路線有插好嗎? +* 網路服務有正確設定嗎? +* 防火牆設定正確嗎? +* FreeBSD 有支援這張網路卡嗎? +* 路由器運作正常嗎? + +[TIP] +==== +在送出錯誤報告之前,請務必查閱 link:https://www.freebsd.org/releases/[FreeBSD 發行版頁面] 上的硬體說明、將 FreeBSD 版本更新到最新的 STABLE 版本、搜尋郵件論壇的存檔,並搜尋網際網路。 +==== + +[[wired-troubleshooting]] +=== 有線網路的疑難排解 + +如果網路卡可以運作但效能不佳,請閱讀 man:tuning[7]。此外,也請檢查網路設定,因為不正確的網路設定可能導致連線緩慢。 + +如果系統無法將封包路由到目的主機,會出現 `No route to host` 的訊息。這可能是因為沒有指定預設路由,或者網路線已拔除。請檢查 `netstat -rn` 的輸出,確認有通往該主機的有效路由。如果沒有,請閱讀 crossref:advanced-networking[network-routing,"通訊閘與路由"]。 + +`ping: sendto: Permission denied` 的錯誤訊息通常是防火牆設定錯誤造成的。如果 FreeBSD 上啟用了防火牆但沒有定義任何規則,預設的政策是拒絕所有流量,包括 man:ping[8]。更多資訊請參考 crossref:firewalls[firewalls,防火牆]。 + +[[wireless-troubleshooting]] +=== 無線網路的疑難排解 + +本節說明幾個排解常見無線網路問題的步驟。 + +* 如果掃描時看不到存取點,請檢查設定是否將無線裝置限制在特定頻道範圍內。 + +* 如果裝置無法與存取點建立關聯,請確認設定與存取點上的設定一致,包括認證方式和安全通訊協定。盡量簡化設定。如果使用 WPA2 或 WPA 等安全通訊協定,試著將存取點設定為開放認證且不使用安全機制,看看流量是否能通過。 + +* 當系統可以與存取點建立關聯後,使用 man:ping[8] 等工具來診斷網路設定問題。 + +* 有許多低層級的除錯工具。可以使用 man:wlandebug[8] 在 802.11 通訊協定支援層中啟用除錯訊息。 From ba3d90efaa980406448924b8971c0d9ed3d82378 Mon Sep 17 00:00:00 2001 From: Po Han Chen Date: Thu, 26 Mar 2026 14:42:04 +0800 Subject: [PATCH 2/3] handbook/zh-tw/network: keep Router Advertisement as English term Consistent with the existing advanced-networking chapter translation, which also keeps 'Router Advertisement' in English. --- .../content/zh-tw/books/handbook/network/_index.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/documentation/content/zh-tw/books/handbook/network/_index.adoc b/documentation/content/zh-tw/books/handbook/network/_index.adoc index 34a14822641..2565e28a423 100644 --- a/documentation/content/zh-tw/books/handbook/network/_index.adoc +++ b/documentation/content/zh-tw/books/handbook/network/_index.adoc @@ -483,9 +483,9 @@ em0: flags=8863 metric 0 mtu 1500 請注意,當啟用 IPv6 封包轉送(即 `ipv6_gateway_enable=YES`)時,除非將 man:sysctl[8] 變數 `net.inet6.ip6.rfc6204w3` 設定為 1,否則系統不會設定 SLAAC 位址。 -=== 路由器公告與主機自動設定 +=== Router Advertisement 與主機自動設定 -本節示範如何在 IPv6 路由器上設定 man:rtadvd[8] 來公告 IPv6 網路前綴和預設路由。 +本節示範如何在 IPv6 路由器上設定 man:rtadvd[8] 來發送 Router Advertisement,公告 IPv6 網路前綴和預設路由。 要啟用 man:rtadvd[8],請執行以下指令: @@ -494,7 +494,7 @@ em0: flags=8863 metric 0 mtu 1500 # sysrc rtadvd_enable="YES" .... -指定要在哪個介面上進行 IPv6 路由器公告是很重要的。例如,要讓 man:rtadvd[8] 使用 `em0`: +指定要在哪個介面上進行 IPv6 Router Advertisement 是很重要的。例如,要讓 man:rtadvd[8] 使用 `em0`: [source,shell] .... From 4e1c0549c36fbcd4e42850eb89e7103e17d61996 Mon Sep 17 00:00:00 2001 From: Po Han Chen Date: Thu, 26 Mar 2026 14:42:50 +0800 Subject: [PATCH 3/3] handbook/zh-tw/network: address review feedback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 'network data' -> '連線資訊' (more natural phrasing) - 'network interface card module' -> '核心模組' - Add '啟用' prefix to SSID scan technique description --- .../content/zh-tw/books/handbook/network/_index.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/documentation/content/zh-tw/books/handbook/network/_index.adoc b/documentation/content/zh-tw/books/handbook/network/_index.adoc index 2565e28a423..547b8c118e1 100644 --- a/documentation/content/zh-tw/books/handbook/network/_index.adoc +++ b/documentation/content/zh-tw/books/handbook/network/_index.adoc @@ -70,7 +70,7 @@ endif::[] 設定有線或無線連線是 FreeBSD 使用者常見的工作。本節將說明如何辨識有線和無線網路介面卡,以及如何設定它們。 -在開始設定之前,需要先知道以下網路資料: +在開始設定之前,需要先知道以下連線資訊: * 網路是否有 DHCP * 若網路沒有 DHCP,要使用的靜態 IP @@ -117,7 +117,7 @@ iwm0@pci0:3:0:0: class=0x028000 rev=0x00 hdr=0x00 vendor=0x8086 device=0x [NOTE] ==== -只有在 FreeBSD 沒有正確偵測到網路介面卡時,才需要手動載入網路介面卡模組。 +只有在 FreeBSD 沒有正確偵測到網路介面卡時,才需要手動載入核心模組。 例如,要載入 man:alc[4] 模組,請執行以下指令: @@ -692,7 +692,7 @@ network={ } .... -<.> SSID 掃描技術。只有在網路是隱藏的情況下才需要使用此選項。 +<.> 啟用 SSID 掃描技術。只有在網路是隱藏的情況下才需要使用此選項。 <.> 網路名稱。 <.> 無線網路的密碼。