使用构建路由器(或网关) Fedora 对于想要了解更多关于 Linux 系统管理和网络的用户来说,Server 是一个有趣的项目。 在本文中,了解如何配置 Fedora 服务器最小安装以充当互联网路由器/网关。
本指南基于 Fedora 28 并假设您已经安装 Fedora 服务器(最小安装)。 此外,您需要合适的网卡/调制解调器用于传入的互联网连接。 在这个例子中, DrayTek VigorNIC 132 NIC 用于创建路由器。
为什么要建立自己的路由器
与购买独立盒子(或使用互联网提供商提供的盒子)相比,构建自己的路由器有很多好处:
- 轻松更新和运行最新的软件版本
- 可能不太容易成为更大的黑客活动的一部分,因为它不是一种常见的消费设备
- 在同一主机/路由器上运行您自己的虚拟机或容器
- 在路由器之上构建 OpenShift(本系列的未来故事)
- 包括您自己的 VPN、Tor 或其他隧道路径以及正确的路由
缺点与时间和知识有关。
- 你必须管理自己的安全
- 如果发生问题或通过网络找到问题,您需要具备排除故障的知识(无支持电话)
- 在大多数情况下,成本高于互联网提供商提供的硬件
基本网络拓扑
下图描述了此设置中使用的基本拓扑。 正在运行的机器 Fedora 服务器有一个用于 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 对齐并创建 pppoe 界面。 这 关联 对它的工作原理有很好的解释。 用户名和密码将由您的互联网提供商提供。
nmcli connection add type pppoe ifname enp2s0 username 00xx[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
由于包括 Windows 和 Linux 在内的许多 DHCP 客户端不考虑 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
DNS 安装和配置
接下来,安装 绑定 并且和 绑定工具 对于像这样的工具 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
最后一个简单的步骤是让 SSH 服务仅在您的 LAN 网段上侦听。 运行此命令以查看此时正在收听的内容。 请记住,我们不允许在外部防火墙区域上使用 SSH,但我认为这一步仍然是最佳实践。
ss -lnp4
现在编辑 SSH 服务以仅侦听您的 LAN 网段。
vi /etc/ssh/sshd_config
AddressFamily inet ListenAddress 10.0.0.1
重新启动 SSH 服务以使更改生效。
systemctl restart sshd.service
谢谢
谢谢,如果您有任何想法、编辑或问题,请在下面发表评论。