同一子网中同一接口上的多个 VLAN

同一子网中同一接口上的多个 VLAN

在设备应用程序中,我们使用以下 VLAN 网络设置:

在设备中,我们有一个用于内部设备的内部网络和一个用于客户/客户网络的外部网络。所有设备都通过托管交换机连接到运行应用程序的 Raspberry Pi 计算模块。

在设置中我们使用以下 VLAN

  • VLAN 1:外部网络
  • VLAN 2:内部网络

计算模块在接口 eth0 上有两个 VLAN 接口 eth0.1(外部)和 eth0.2(内部)。这样一来,客户就看不到内部网络设备了。托管交换机配置了基于端口的 VLAN。

网络设置

对于内部网络,计算模块使用 eth0.2 和静态 IP 地址 192.168.2.1 - 内部网络设备也在同一个子网 192.168.2.x 中。

对于外部网络,计算模块使用 eth0.1 和静态 IP 地址 192.168.1.100。

我们在计算模块上的配置:

/etc/sysctl.conf

net.ipv4.ip_forward = 1

/etc/网络/接口

# VLAN external interface
auto eth0.1
iface eth0.1 inet manual
    vlan-raw-device eth0


# VLAN internal interface
auto eth0.2
iface eth0.2 inet manual
    vlan-raw-device eth0

/etc/dhcpcd.conf

interface eth0
static ip_address=
static routers=
static domain_name_servers=
static domain_search=

interface eth0.1
static ip_address=192.168.1.100/24
static routers=
static domain_name_servers=
static domain_search=

interface eth0.2
static ip_address=192.168.2.1/24
static routers=
static domain_name_servers=
static domain_search=

对于客户 PC 直接通过外部 IP 与内部设备 192.168.2.100 进行通信,我们制定了以下规则。这样,客户将通过端口 8080 上的外部 IP 地址 192.168.1.100:8080 访问内部 192.168.2.100:80。

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.2.100:80
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

一般情况下,此设置有效,但并非在所有情况下都有效:客户可以更改 eth0.1 的外部 IP 地址。客户可以将 eth0.1 的 IP 配置为另一个静态 IP 地址或 dhcp。如果 eth0.1 上的静态 IP 地址为 192.168.2.x,则客户将访问 eth0.2 的 192.168.2.1。

如果 eth0.1 的外部 IP 位于同一子网中,那么客户怎么可能访问不到内部 IP 192.168.2.1?如果 eth0.1 和 eth0.2 位于同一子网中或两者都是 192.168.2.1,那么如何区分它们?

例如:如果 eth0.2 具有与内部网络设备相同的 IP 地址,则由于此 IP 冲突,无法连接到计算模块。

相关内容