我尝试在基于 Debian 的盒子上设置一个奇怪的配置。
这是一种具有两个网络接口 eth0 和 eth1 的工业 PC。我将其用作客户网络的“扫描设备”。有些使用 DHCP,有些则不使用。有些可以给我一个固定 IP,有些则不能,甚至不知道我的设备将收到的 DHCP 地址。
因此我在 /etc/network/interfaces 中创建了以下设置:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
# Bridge interface
auto br0
iface br0 inet dhcp
bridge_ports eth0 eth1
bridge_hw aa:bb:cc:dd:ee:ff
# pre-set interface IP for client requirements, if DHCP is not working
auto br0:1
iface br0:1 inet static
address 172.16.21.150
netmask 255.255.255.0
network 172.16.21.0
broadcast 172.16.21.255
# Gateway
post-up route add default gw 172.16.21.254
pre-down route del default gw 172.16.21.254
# Set default fallback interface IP address
auto br0:100
iface br0:100 inet static
address 169.254.111.111
netmask 255.255.255.0
network 169.254.111.0
broadcast 169.254.111.255
如您所见,有三个接口。br0 用于 DHCP,br0:1 用于客户提供的静态 IP。通常 br0 和 br0:1 不会同时使用。br0:100 也是静态的,但具有链接本地地址。我使用它来访问没有连接计算机显示器的盒子,只需通过 IP 和 ssh 即可。除了当我通过直接连接将笔记本电脑连接到 br0:100 时(请记住,它是一种虚拟接口,而不是专用的物理接口!),一切都运行良好。
当通过 ssh 在盒子上工作时,我能够访问客户的网络并连接到互联网(除了客户端可能的 fw 规则......)
但是我无法从我的笔记本电脑访问互联网,只能从客户的网络访问。所以我的想法是,本地客户的配置确实只允许从他们的网络范围访问互联网。但我的笔记本电脑有其他范围。一个好主意是设置 NAT,我尝试了这些简单的 NAT 规则:
# IP Forwarding im Kernel aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward
# Masqerading auf br0 und br0.1 aktivieren
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o br0:1 -j MASQUERADE
# Forwarding Regeln einrichten
# Forwarding etablierter Verbindungen von extern (br0 & br0.1) nach intern (br0.100)
iptables -A FORWARD -i br0 -o br0:100 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i br0:1 -o br0:100 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Forwarding aller Verbindungen von intern (br0.100) nach extern (br0 & br0.1)
iptables -A FORWARD -i br0:100 -o br0 -j ACCEPT
iptables -A FORWARD -i br0:100 -o br0:1 -j ACCEPT
这破坏了我的整个设置。盒子本身无法再连接到网络。
我不知道哪里出了问题,也不知道该如何解决。任何想法都值得赞赏。
问候奥拉夫
答案1
您使用的是别名,而不是虚拟接口。别名只是接口上的 IP 地址。因此您不能在iptables 规则的
--input-interface
(-i
) 和output-interface
(-o
) 选项中使用它。使用命令检查整个防火墙规则集
iptables-save -c
。您可能会看到指定别名(接口名称中带有冒号)的规则的计数器为零。如果我理解正确的话,你需要按照以下步骤来实现你的目标:
- 在您的笔记本电脑上分配一个范围内的 IP 地址
169.254.111.0/24
(例如169.254.111.112/24
)和默认网关169.254.111.111
。 - 在 Linux 机器上你需要 iptables 规则:
- 在您的笔记本电脑上分配一个范围内的 IP 地址
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD --src 169.254.111.112 -j ACCEPT
- 最好也禁止在 Linux 机器上发送重定向:
sysctl -w net.ipv4.conf.all.send_redirects=0
- 要解决问题,请运行
tcpdump
。