Ubuntu 服务器既可用作私有 NAT 路由器,又可用作公共路由器

Ubuntu 服务器既可用作私有 NAT 路由器,又可用作公共路由器

我正在尝试做一些我从未尝试过的事情。我有一台安装了 Ubuntu 的 Dell PowerEdge 540。我安装了 Comcast Business 线路,并具有以下物理网络配置:

Ubuntu Server 20.04.3 LTS

enp10s0f0:   (10gb SFP+ Add-on card)
IPv4: 5*.2*.204.214
Subnet: 255.255.255.252
Gateway: 5*.2*.204.213

enp10s0f1:   (10gb SFP+ Add-on card)
IPv4: 5*.2*.205.1
Subnet: 255.255.255.0

eno1:        (1gb copper ethernet)
IPv4: 10.0.0.0
Subnet: 255.0.0.0

这是输出IP 地址

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: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:1e:c9:b5:b2:3c brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/8 brd 10.255.255.255 scope global eno1
       valid_lft forever preferred_lft forever
    inet6 ****::***:c9ff:feb5:b23c/64 scope link
       valid_lft forever preferred_lft forever
3: eno2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:1e:c9:b5:b2:3e brd ff:ff:ff:ff:ff:ff
4: enp12s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:10:18:0d:a3:7e brd ff:ff:ff:ff:ff:ff
5: enp10s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether f4:e9:d4:92:9d:d0 brd ff:ff:ff:ff:ff:ff
    inet 5*.2*.204.214/30 brd 5*.2*.204.215 scope global enp10s0f0
       valid_lft forever preferred_lft forever
    inet6 fe80::f6e9:d4ff:fe92:9dd0/64 scope link
       valid_lft forever preferred_lft forever
6: enp10s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether f4:e9:d4:92:9d:d2 brd ff:ff:ff:ff:ff:ff
    inet 5*.2*.205.1/24 brd 5*.2*.205.255 scope global enp10s0f1
       valid_lft forever preferred_lft forever
    inet6 ****::****:d4ff:fe92:9dd2/64 scope link
       valid_lft forever preferred_lft forever

我配置了以下 IP 路由:

default via 5*.2*.204.213 dev enp10s0f0 proto static
10.0.0.0/8 dev eno1 proto kernel scope link src 10.0.0.1
5*.2*.204.212/30 dev enp10s0f0 proto kernel scope link src 5*.2*.204.214
5*.2*.205.0/24 dev enp10s0f1 proto kernel scope link src 5*.2*.205.1

以下内容保存在我的/etc/rc.local文件:

#!/bin/sh -e

iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables -F
iptables -X

###################### Enable Nat ############################
sudo echo "1" > /proc/sys/net/ipv4/ip_forward

#################### Enable Nat for internal ###########################
iptables -t nat -A POSTROUTING -o enp10s0f0 -j MASQUERADE
#iptables -t nat -A POSTROUTING -o enp12s0f1 -j MASQUERADE

################### Enable Log ########################
#iptables -A OUTPUT -j LOG
#iptables -A INPUT -j LOG
#iptables -A FORWARD -j LOG

############# Allow by default #####################
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

############################ Allow Incoming connection ############################
iptables -A INPUT -m conntrack --ctstate "ESTABLISHED,RELATED" -j ACCEPT

################################## Allow outgoing connection ######################
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

######################## allow internal to external
iptables -A FORWARD -i eno1 -m state "ESTABLISHED,RELATED" -j ACCEPT
#iptables -A FORWARD -i eno1 -o enp12s0f1 -m state "ESTABLISHED,RELATED" -j ACCEPT
###iptables -A FORWARD -i eno1 -o enp10s0f1 -j ACCEPT
iptables -A FORWARD -i eno1 -o enp10s0f1 -j ACCEPT
#iptables -A FORWARD -i eno1 -o enp12s0f0 -j ACCEPT
#iptables -A FORWARD -i enp10s0f1 -o enp10s0f0 -j ACCEPT
#iptables -A FORWARD -i enp10s0f0 -o enp12s0f1 -j ACCEPT
exit 0

网络图: 网络图,由于我还不能发布图片,所以附上链接

您可能会注意到,我花了很多时间在网上阅读解决此问题的最佳方法,其中很多内容都被注释掉了。我认为,我只需要在eno1界面。但是,既然它是 Linux,我是否需要iptables进行非 NAT 路由?我尝试禁用它,但公共网络根本无法工作。

即使我让一件事正常工作,最终也会破坏其他事情。我已经好几年没上过思科课程了,我还不习惯这种无知的感觉。我真的希望有人能帮我找出实现这一点的最佳方法,或者可能发现我犯的任何导致错误的错误。

答案1

5*.2*.205.0/24我推测您的 ISP通过设置了到您的网络路由5*.2*.204.214

让我们假设以下状态:Netfilter 处于默认状态(iptables-save显示无规则且所有策略均为ACCEPT)。您的公共网络5*.2*.205.0/24正常运行,主机具有默认网关5*.2*.205.1。私有网络10.0.0.0/8(带有网关)无法运行,因为未设置 NAT。此外,我希望和10.0.0.1中的主机能够相互看到和通信。10.0.0.0/85*.2*.205.0/24

您几乎无需做任何事情即可实现此目的。只需设置所有 IP 的网络掩码并在内核中启用 IP 转发(例如net.ipv4.ip_forward=1)。您的路由表应该与您已有的路由表类似。

为了10.0.0.0/8实现互联网,您只需添加以下规则:

iptables -t nat -A POSTROUTING -o enp10s0f0 -s 10.0.0.0/8 -j MASQUERADE

它将对流向外部的“灰色”地址进行 NAT。您可以用(分配给 的地址)或 中-j MASQUERADE的任何一个替换。-j SNAT --to-source 5*.2*.205.1enp10s0f15*.2*.204.214

如果您想将网络5*.2*.205.0/24视为互联网,您可以添加另一条 NAT 规则并转换进入该网络的连接10.0.0.0/8。这条规则与第一条规则相同,但传出接口过滤器除外-o enp10s0f1。但是,不添加 NAT 可能会很有用,特别是如果您控制网络并希望其中的主机看到直接10.0.0.0/8地址而不是隐藏在网关地址下。

相关内容