如何在 Fedora 服務器上創建路由器/網關 – Linux 技術博客


對於任何有興趣了解更多關於 Linux 系統管理和網絡的人來說,使用 Fedora Server 構建路由器(或網關)是一個有趣的項目。在本文中,了解如何配置 Fedora Server 的最小安裝以充當 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 設置 WAN (PPPoE) 接口上的 MTU,使其與 DSL/ATM MTU 匹配。 界面。這個 協會 有一個很好的解釋它是如何工作的。用戶名和密碼由您的 Internet 提供商提供。

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

virsh net-start 主機橋 virsh net-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 地址捕獲到下面的配置文件中,或者從您要配置的設備的外部選項卡中獲取它。向上作為靜態尋址向下。

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

謝謝你。如果您有任何想法、編輯或問題,請在下方發表評論。