我有一台 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