在一个 NIC Linux 上的两个虚拟接口之间进行路由

在一个 NIC Linux 上的两个虚拟接口之间进行路由

我有一台 Ubuntu 机器作为我的防火墙

该机器有 2 个 NIC 卡。eth0 和 eth1。eth1 连接到调制解调器,为其提供 IP 10.10.1.X

eth1 需要在 192.168.2.X 上提供 DHCP,并且需要从连接到在 192.168.1.X 上提供 DHCP 的路由器的交换机获得另一个 IP

目前这台机器有以下IP

eth0 - 10.10.0.4
eth1 - 192.168.2.1 (DHCP Server, Gateway)
eth1:0 - 102.168.1.103

我正在尝试完成以下任务

如果一台机器通过交换机连接到 eth1,它应该能够 ping 192.168.1.10,

 [Modem+Router 10.1.1.0/24]
   |
   |
   |
 (eth0)                  |----- [ Server 192.168.1.10]
 Ubuntu                  |
Firewall (eth1) ----- [Switch]-----[Modem+Router 192.168.1.0/24]
         (eth1:0)--------| \
                            \
                             \--------[EndPoint 192.168.2.4]   

我的基本问题在于,我收到来自 2.4 的数据包,这些数据包发往互联网,我能够使用 IpTables 正确地路由它们。然而,如果数据包到达 1.10,我应该使用适当的选项设置将其发送回交换机。

我已经尝试过以下

  • 将 1.0 的默认网关设置为 2.1 和 2.4,并将下一跳设置为 1.1,我希望这样可以正确转发
  • 我还桥接了 eth1 和 eth1:0 bridge-utils,然后为 2.X 中想要从 10.10.0.1 访问互联网的任何人应用了 iptables 转发

答案1

您的配置通常应该开箱即用。原则上,路由由 Linux 路由代码支持,与 Netfilter 无关。“iptables”是用于配置内核 Netfilter 框架的用户空间实用程序,它执行过滤和数据包修改(修改和地址转换),但不执行任何路由。因此说“我使用 iptables 进行路由”是不正确的。

桥接也是另一回事,在这里不应该帮到你。别名接口的桥接可能会形成一个循环,从而破坏该以太网段的网络。

您需要两侧都有路由,例如,ip route add 192.168.2.0/24 via 192.168.1.103在 192.168.1.0/24 网络中的主机上设置路由,并在 192.168.2.0/24 网络中的主机上将 192.168.2.1 设置为默认网关。

如果你已经在防火墙盒上严格设置了防火墙,那么你需要启用从 eth1 到 eth1:1 以及返回的流量转发:

iptables -A FORWARD -i eth1 -o eth1:0 -j ACCEPT
iptables -A FORWARD -o eth1 -i eth1:0 -j ACCEPT

iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT或者,如果您已经使用或 -m state(已过时)配置了状态防火墙,那么您可能只需要一条第一规则。

仅当您想伪装该流量时才需要特殊的 iptables 配置,以便 192.168.1.0/24 中的主机不知道您正在从 192.168.2.0/24 网络进行连接。然后您不需要在 .1.0/24 端添加任何附加路由,但需要 NAT 规则和转发启用规则:

iptables -t nat -A POSTROUTING -o eth1:1 -s 192.168.2.0/24 -o 192.168.1.0/24 -j SNAT --to-source 192.168.1.103
iptables -A FORWARD -i eth1 -o eth1:0 -j ACCEPT

相关内容