Ubuntu 18.04 作为路由器

Dou*_*oug 7 networking routing router 18.04

Ubuntu 18.04。我被要求使用 Ubuntu 作为简单的路由器。

Ubuntu box 有 2 个接口 - ens33 DHCP,ens38 192.168.10.1/24。33在外面,38在我的目的里面。这个盒子后面有几个网络 - 192.168.10.x 和 192.168.20.x。从这些网络中的任何一个,我都可以 ping ubuntu 机器上的两个接口。我无法通过外部接口 (33) ping 出。

我已编辑 /etc/sysctl.conf 以允许 ipv4 转发 - net.ipv4.ip_forward=1。

我添加了一个路由来显示通过 38 到其他网络 192.168.20.x 的网关。

不寻找 nat,只是路线。

有人看到我缺少什么吗?如果需要更多信息,请告诉我。

道格

Dou*_*oug 8

想发布我正在寻找的答案,以防其他人需要相同的场景。AlexP 为我指出了正确的方向——外部盒子不知道如何回复,我不想在每个可能使用它的网络上添加路由。

我确实想要路由,但我也需要 NAT。

这些说明是从几个不同的来源拼凑而成的,但主要是 - https://help.ubuntu.com/lts/serverguide/firewall.html <- 这里的 ufw IP Maquerading 部分。

CentOS 说明来自这里 - https://ronnybull.com/2015/11/20/how-to-centos-7-router/

我假设 Ubuntu 机器上有一个内部和一个外部接口,并且已经配置了这些设置。(还在最底部添加了使用 CentOS 7 完成相同操作的说明——这也是我的要求)

1 . 首先,启用 ufw 和 ufw 日志记录

sudo ufw enable
sudo ufw logging on
Run Code Online (Sandbox Code Playgroud)

2 . 刷新任何现有规则(如果您已经使用 ufw 或 IP 表进行防火墙,请不要这样做)。删除并刷新。默认表是“过滤器”。其他如“nat”必须明确说明。

iptables --flush            # Flush all the rules in filter and nat tables    
iptables --table nat --flush    
iptables --delete-chain    # Delete all chains that are not in default filter and nat table    
iptables --table nat --delete-chain    
Run Code Online (Sandbox Code Playgroud)

3 . 首先需要在ufw中开启数据包转发。需要调整两个配置文件,在 /etc/default/ufw 中将 DEFAULT_FORWARD_POLICY 更改为“ACCEPT”:

DEFAULT_FORWARD_POLICY="ACCEPT"
Run Code Online (Sandbox Code Playgroud)

4 . 然后编辑 /etc/ufw/sysctl.conf 并取消注释:

net/ipv4/ip_forward=1
net/ipv4/conf/all/forwarding=1 
net/ipv6/conf/default/forwarding=1 # if using IPv6
Run Code Online (Sandbox Code Playgroud)

5 . 现在将规则添加到 /etc/ufw/before.rules 文件。默认规则只配置过滤表,并且启用伪装 nat 表需要配置。将以下内容添加到文件顶部的标题注释之后:

# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic from eth1 through eth0.
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
# don't delete the 'COMMIT' line or these nat table rules won't be processed
COMMIT
Run Code Online (Sandbox Code Playgroud)

对于每个表,都需要一个相应的 COMMIT 语句。在这些示例中,只显示了 nat 和 filter 表,但您也可以为 raw 和 mangle 表添加规则。在上面的示例中,将 eth0、eth1 和 192.168.0.0/24 替换为适合您网络的接口和 IP 范围。

6 . 最后,禁用并重新启用 ufw 以应用更改:

sudo ufw disable && sudo ufw enable
Run Code Online (Sandbox Code Playgroud)

现在应该启用 IP 伪装。您还可以将任何其他 FORWARD 规则添加到 /etc/ufw/before.rules。建议将这些附加规则添加到 ufw-before-forward 链中。

CentOS 7 firewalld 配置完成同样的事情-

1.启用 IPv4 数据包转发。

一种。将以下内容添加到 /etc/sysctl.conf:

 net.ipv4.ip_forward = 1
Run Code Online (Sandbox Code Playgroud)

湾 应用 sysctl 设置:

sysctl -p
Run Code Online (Sandbox Code Playgroud)

2.向firewalld 添加直接规则。添加 --permanent 选项以在重新启动时保持这些规则。

firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o eth_ext -j MASQUERADE    
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth_int -o eth_ext -j ACCEPT    
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth_ext -o eth_int -m state --state RELATED,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

一种。将以下内容添加到 /etc/sysctl.conf:

 net.ipv4.ip_forward = 1
Run Code Online (Sandbox Code Playgroud)

湾 应用 sysctl 设置:

sysctl -p
Run Code Online (Sandbox Code Playgroud)

2.向firewalld 添加直接规则。添加 --permanent 选项以在重新启动时保持这些规则。

firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o eth_ext -j MASQUERADE    
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth_int -o eth_ext -j ACCEPT    
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth_ext -o eth_int -m state --state RELATED,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)