對於想要了解更多關於管理和聯網 Linux 系統的用戶來說,使用 Fedora 服務器構建路由器(或網關)是一個有趣的項目。在本文中,您將學習如何配置 Fedora 服務器的最小安裝以充當 Internet 路由器/網關。
本指南基於 軟呢帽 28 並假設您安裝了 Fedora 服務器(最小安裝)。您還需要一個合適的網卡/調製解調器來連接傳入的 Internet。在這個例子中, DrayTek VigorNIC 132 NIC 用於創建路由器。
建立自己的路由器的原因
與購買獨立的盒子(或使用互聯網提供商的路由器)相比,構建自己的路由器有幾個優點。
- 輕鬆更新和運行最新的軟件版本
- 不是典型的消費設備,因此不太可能成為重大黑客攻擊的一部分
- 在同一主機/路由器上運行您自己的虛擬機或容器
- 在路由器上構建 OpenShift(本系列的未來故事)
- 包括您自己的 VPN、Tor 或其他隧道路徑和正確的路由
弱點與時間和知識有關。
- 你必須管理自己的安全
- 如果出現問題或在網絡上發現問題,則需要故障排除知識(無需支持電話)
- 在大多數情況下,成本將高於您的互聯網提供商提供的硬件
基本網絡拓撲
下圖顯示了此設置中使用的基本拓撲。運行機器 Fedora Server 有一個用於 VDSL 的 PCI Express 調製解調器。或者使用時 覆盆子派 使用外部調製解調器的配置幾乎相同。
初始設定
首先,安裝創建路由器所需的軟件包。包含 Bash 自動完成功能,以便稍後進行配置。此外,安裝該軟件包以允許您通過 KVM-QEMU 在同一路由器/主機上託管您自己的虛擬機。
dnf install -y bash-completion NetworkManager-ppp qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer
下一個, nmcli 為 DSL / ATM MTU 配置和創建 MTU on WAN (PPPoE) 接口 pppoe 界面。這個 協會 有一個很好的解釋它是如何工作的。您的用戶名和密碼將由您的互聯網提供商提供。
nmcli connection add type pppoe ifname enp2s0 username [email protected] password XXXXXX 802-3-ethernet.mtu 1452
然後將默認區域設置為外部防火牆並刪除傳入的 SSH 訪問。
firewall-cmd --set-default-zone=external firewall-cmd --permanent --zone=external --remove-service=ssh
添加 LAN 接口 (br0) 和首選 LAN IP 地址,然後將物理 LAN 接口添加到網橋。
nmcli connection add ifname br0 type bridge con-name br0 bridge.stp no ipv4.addresses 10.0.0.1/24 ipv4.method manual nmcli connection add type bridge-slave ifname enp1s0 master br0
請記住使用與您的工作 VPN 子網不重疊的子網。例如,我的工作是在與我的辦公室建立 VPN 連接時提供 10.32.0.0/16 的子網,所以我應該避免在我的家庭網絡上使用它。如果尋址重複,則 VPN 提供的路由優先級較低,可能無法通過 VPN 隧道進行路由。
接下來,創建一個名為 bridge.xml 的文件,其中包含網橋定義。 虛擬的 將被消耗在 QEMU..
cat > bridge.xml <<EOF <network> <name>host-bridge</name> <forward mode="bridge"/> <bridge name="br0"/> </network> EOF
啟動並啟用 libvirt-guests 服務,以允許您向虛擬環境添加一個橋接器以供 VM 使用。
systemctl start libvirt-guests.service
systemctl enable libvirt-guests.service
使用 virsh 命令和您之前創建的 XML 文件將“主機橋”添加到 QEMU。
virsh net-define bridge.xml
virshnet-start 主機橋 virshnet-autostart 主機橋
將 br0 添加到內部區域以允許 DNS 和 DHCP。這是為這個路由器設置你自己的服務。
firewall-cmd --permanent --zone=internal --add-interface=br0 firewall-cmd --permanent --zone=internal --add-service=dhcp firewall-cmd --permanent --zone=internal --add-service=dns
許多 DHCP 客戶端,包括 Windows 和 Linux,不考慮 DHCP MTU 屬性,因此基於 TCP 的協議需要能夠根據 PMTU 大小配置 MSS。
firewall-cmd --permanent --direct --add-passthrough ipv4 -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
然後重新加載防火牆以進行永久更改。
nmcli connection reload
安裝和配置 DHCP
DHCP 配置取決於您的家庭網絡設置。如果您使用自己的域名,子網將在創建時定義 br0.. 請注意,當您啟動並運行 DHCP 服務時,您可以通過以下命令在以下配置文件中捕獲 MAC 地址,也可以從要配置的設備的外部選項卡中提取 MAC 地址。上下作為靜態地址規範。
cat /var/lib/dhcpd/dhcpd.leases
dnf -y install dhcp vi /etc/dhcp/dhcpd.conf
option domain-name "lajoie.org"; option domain-name-servers 10.0.0.1; default-lease-time 600; max-lease-time 7200; authoritative; subnet 10.0.0.0 netmask 255.255.255.0 { range dynamic-bootp 10.0.0.100 10.0.0.254; option broadcast-address 10.0.0.255; option routers 10.0.0.1; option interface-mtu 1452; } host ubifi { option host-name "ubifi.lajoie.org"; hardware ethernet f0:9f:c2:1f:c1:12; fixed-address 10.0.0.2; }
現在啟用並啟動 DHCP 服務器
systemctl start dhcpd systemctl enable dhcpd
然後安裝 揉 與 裝訂工具 對於此類工具 nslookup 什麼時候 你..
dnf -y install bind bind-utils
使用監聽地址(在本例中為 LAN 接口)和正向/反向區域配置綁定服務器。
$ vi /etc/named.conf
options { listen-on port 53 { 10.0.0.1; }; listen-on-v6 port 53 { none; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; allow-query { 10.0.0.0/24; }; recursion yes; forwarders {8.8.8.8; 8.8.4.4; }; dnssec-enable yes; dnssec-validation yes; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; include "/etc/crypto-policies/back-ends/bind.config"; }; controls { }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; view "internal" { match-clients { localhost; 10.0.0.0/24; }; zone "lajoie.org" IN { type master; file "lajoie.org.db"; allow-update { none; }; }; zone "0.0.10.in-addr.arpa" IN { type master; file "0.0.10.db"; allow-update { none; }; }; };
例如,這裡是區域文件。如果每次編輯綁定服務時都更新序列號,則沒有任何變化。
$ vi /var/named/lajoie.org.db
$TTL 86400 @ IN SOA gw.lajoie.org. root.lajoie.org. ( 2018040801 ;Serial 3600 ;Refresh 1800 ;Retry 604800 ;Expire 86400 ;Minimum TTL ) IN NS gw.lajoie.org. IN A 10.0.0.1 gw IN A 10.0.0.1 ubifi IN A 10.0.0.2
例如,這是一個反向區域文件,它保證每次編輯綁定的服務時都會更新序列號。這假設沒有任何變化。
$ vi /var/named/0.0.10.db
$TTL 86400 @ IN SOA gw.lajoie.org. root.lajoie.org. ( 2018040801 ;Serial 3600 ;Refresh 1800 ;Retry 604800 ;Expire 86400 ;Minimum TTL ) IN NS gw.lajoie.org. IN PTR lajoie.org. IN A 255.255.255.0 1 IN PTR gw.lajoie.org. 2 IN PTR ubifi.lajoie.org.
然後啟用並啟動 DNS 服務器
systemctl start named systemctl enable named
最後一個簡單的步驟是讓 SSH 服務僅在 LAN 網段上偵聽。運行此命令以查看當前正在收聽的內容。請注意,不允許在外部防火牆區域中使用 SSH。但是,我認為此過程仍然是最佳實踐。
ss -lnp4
然後編輯 SSH 服務,只監聽 LAN 網段。
vi /etc/ssh/sshd_config
AddressFamily inet ListenAddress 10.0.0.1
重新啟動 SSH 服務以使更改生效。
systemctl restart sshd.service
謝謝你。如果您有任何意見、編輯或問題,請在下方留言。