将 Ubuntu 20.04 配置为 Linux 路由器

按照本教程学习如何将 Ubuntu 20.04 配置为 Linux 路由器。 Linux 很棒,它可以充当“任何东西”,-:)。 就像您可以使用任何其他路由器在本地网络之间甚至到 Internet 之间路由流量一样。

将 Ubuntu 20.04 配置为 Linux 路由器

将 Linux 系统配置为用作路由器还有更多内容。 但是,在本教程中,我们将介绍如何配置 Linux 路由器以通过 WAN 接口将流量路由到 Internet,以及通过 LAN 接口在 LAN 之间路由流量。

下面是我们的基本设置图;

为 Linux 路由器分配静态 IP 地址

根据我们的设置,我们的 Linux 路由器附加了三个接口:

  • enp0s3: WAN 接口,IP 为 192.168.100.101(出价,静态)
  • enp0s8:局域网,172.16.0.1/24,(静态)
  • enp0s9: LAN 172.16.1.1/24, (静态)

路由器上的 IP 地址详细信息

ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1/8 scope host lo        valid_lft forever preferred_lft forever     inet6 ::1/128 scope host         valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000     link/ether 08:00:27:df:2c:b4 brd ff:ff:ff:ff:ff:ff     inet 192.168.100.101/24 brd 192.168.100.255 scope global dynamic enp0s3        valid_lft 86100sec preferred_lft 86100sec     inet6 fe80::a00:27ff:fedf:2cb4/64 scope link         valid_lft forever preferred_lft forever 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000     link/ether 08:00:27:12:62:bf brd ff:ff:ff:ff:ff:ff     inet 172.168.0.1/24 brd 172.168.0.255 scope global enp0s8        valid_lft forever preferred_lft forever     inet6 fe80::a00:27ff:fe12:62bf/64 scope link         valid_lft forever preferred_lft forever 4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000     link/ether 08:00:27:66:4b:4f brd ff:ff:ff:ff:ff:ff     inet 172.16.1.1/24 brd 172.16.1.255 scope global enp0s9        valid_lft forever preferred_lft forever     inet6 fe80::a00:27ff:fe66:4b4f/64 scope link         valid_lft forever preferred_lft forever

IP地址分配;

cat /etc/netplan/00-installer-config.yaml
network:   version: 2   renderer: networkd   ethernets:     enp0s3:       dhcp4: no       addresses: [192.168.100.101/24]       gateway4: 192.168.100.1       nameservers:               addresses:                       - 192.168.100.1                       - 8.8.8.8     enp0s8:       dhcp4: no       addresses: [172.16.0.1/24]     enp0s9:       dhcp4: no       addresses: [172.16.1.1/24]

其他 LAN 服务器的 IP 地址详细信息;

主机在 172.16.1.0/24 网络上:

ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1/8 scope host lo        valid_lft forever preferred_lft forever     inet6 ::1/128 scope host         valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000     link/ether 08:00:27:79:66:34 brd ff:ff:ff:ff:ff:ff     inet 172.16.1.10/24 brd 172.16.1.255 scope global enp0s3        valid_lft forever preferred_lft forever     inet6 fe80::a00:27ff:fe79:6634/64 scope link         valid_lft forever preferred_lft forever
cat /etc/netplan/00-installer-config.yaml
network:   version: 2   renderer: networkd   ethernets:     enp0s3:       dhcp4: no       addresses:               - 172.16.1.10/24       gateway4: 172.16.1.1       nameservers:               addresses:                       - 172.16.1.1                       - 8.8.8.8

主机在 172.16.1.0/24 网络上:

ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1/8 scope host lo        valid_lft forever preferred_lft forever     inet6 ::1/128 scope host         valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000     link/ether 08:00:27:3e:fe:0e brd ff:ff:ff:ff:ff:ff     inet 172.16.0.10/24 brd 172.16.0.255 scope global noprefixroute enp0s3        valid_lft forever preferred_lft forever     inet6 fe80::eb09:7797:df2d:d54b/64 scope link noprefixroute         valid_lft forever preferred_lft forever
cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none IPADDR=172.16.0.10 PREFIX=24 GATEWAY=172.16.0.1 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp0s3 UUID=ea93c07b-a40e-4e1f-a850-f97e2a762f9a DEVICE=enp0s3 ONBOOT=yes DNS1=172.16.0.1 DNS2=8.8.8.8 NM_CONTROLLED=no

这一点;

  • 没有局域网设备可以访问互联网
  • 只有同一局域网内的设备可以互相访问
  • 没有设备可以访问不同局域网上的设备

在 Ubuntu Linux 路由器上启用内核 IP 转发

接下来,您需要启用 IP 转发,以便 Linux 路由器盒能够充当路由器,接收和转发数据包。

完成此操作后,172.16.0.0/24 和 172.16.1.0/24 上的设备应该能够通信。

要启用 IP 转发,您需要取消注释该行 net.ipv4.ip_forward=1/etc/sysctl.conf 配置文件。

因此,首先检查该行是否已在配置文件中定义;

grep net.ipv4.ip_forward /etc/sysctl.conf

样本输出;

#net.ipv4.ip_forward=1

如果该行存在于配置文件和注释中,只需通过运行以下命令取消注释;

sed -i '/net.ipv4.ip_forward/s/^#//' /etc/sysctl.conf

否则,只需插入该行;

echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf

接下来,应用更改;

sysctl -p

通过运行以下命令检查状态;

sysctl net.ipv4.ip_forward

值应为 1。

验证两个 LAN 之间的 IP 转发。

在 Linux 路由器上配置 NAT 和转发

NATing 和转发可以使用 iptables 或通过 iptables 前端实用程序,如 UFW.

配置数据包转发

配置从路由器 LAN 接口接收的数据包(enp0s8enp0s9) 通过 WAN 接口转发,在我们的例子中是 enp0s3.

iptables -A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT
iptables -A FORWARD -i enp0s9 -o enp0s3 -j ACCEPT

同样,配置与在 WAN 接口上接收到的现有连接相关联的数据包,以转发到 LAN 接口;

iptables -A FORWARD -i  enp0s3 -o enp0s8 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i  enp0s3 -o enp0s9 -m state --state RELATED,ESTABLISHED -j ACCEPT

配置 NAT

接下来,配置NATing;

iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE

咨询 man iptables 想要查询更多的信息。

Save 在 Linux 中永久使用 iptables 规则

为了永久保存iptables规则,只需安装 iptables-persistent 打包并运行 iptables-save 命令如下。

apt install iptables-persistent

当前规则将在软件包安装期间保存,但此后仍然可以通过运行命令保存它们;

iptables-save > /etc/iptables/rules.v4

您的 LAN 系统现在应该能够通过 Linux 路由器连接到 Internet;

你去吧。 您的虚拟机现在可以通过您的 Linux 路由器路由流量。

我们关于如何将 Ubuntu 20.04 配置为 Linux 路由器的指南到此结束。

Linux下Firewalld的基本操作

在 KVM 上安装 pfSense 防火墙

安装和配置 Endian 防火墙 VirtualBox