如何将 VLAN 子网路由到我的 DSL ppp0

如何将 VLAN 子网路由到我的 DSL ppp0

我通过华为 ONT 设备建立了光纤连接。(我不知道具体型号)ISP 将设备模式更改为“调制解调器”,因此我应该通过 PPPoE 连接。(我有用户名和密码)

当我使用 Windows 7 x64 进行测试时,PPPoE 连接运行良好。

我有一个 16.04.4 LTS(Xenial Xerus)服务器(无 GUI),带有 3 个以太网连接:

  • eth0——板载网卡
  • eth1 – 板载网卡
  • wan0——PCI-X 网卡

ONT设备连接到“wan0”,用“pppoeconf”配置PPPoE连接。

“pppoeconf” 创建了一个“ppp0”接口。PPP 连接有两个 IP 地址:公共端有一个固定的公共 IP(例如 FIX.EDI.PAD.DRE.SSS),私有端 IP 地址是 10.0.0.1/32。

从 Linux 服务器终端,我可以 ping 8.8.8.8、google.com,使用 Lynx 浏览任何网站。并且服务器允许来自互联网的 SSH 连接。

因此 PPPoE 连接可以完美运行。

该服务器通过“eth0”、“eth1”网卡连接到子网。子网在逻辑上由 VLAN 分隔(eth0.11、eth1.22、eth1.33,...)

以下是“/etc/network/interfaces”文件内容:

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto wan0
iface wan0 inet dhcp
     
auto eth0.11
iface eth0.11 inet static
     address 10.1.0.1
     network 10.1.0.0
     netmask 255.255.0.0
     broadcast 10.1.255.255
     vlan-raw-device eth0

auto eth1.22
iface eth1.22 inet static
     address 10.2.0.1
     network 10.2.0.0
     netmask 255.255.0.0
     broadcast 10.2.255.255
     vlan-raw-device eth1

auto eth1.33
iface eth1.33 inet static
     address 10.3.0.1
     network 10.3.0.0
     netmask 255.255.0.0
     broadcast 10.3.255.255
     vlan-raw-device eth1
     
auto dsl-provider
iface dsl-provider inet ppp
pre-up /bin/ip link set wan0 up # line maintained by pppoeconf
provider dsl-provider

最后一个块(auto dsl-provider ...)由“pppoeconf”添加。

Linux服务器为子网的机器提供DHCP、DNS、NTP服务。

有一台配置为使用 VLAN 33 的测试 Windows 7 x64 计算机。该计算机从给定范围内的 Linux 获取动态 IP。我只能在 VLAN (33) 子网和 10.3.0.1 中 ping 通。

我无法从 VLAN 子网 ping 8.8.8.8、google.com 或其他任何内容,所以基本上无法访问互联网

有一些 iptables 规则(默认是 DROP),以下是一些相关的行:

$IPTABLES -N privnet_as_source_accept
$IPTABLES -A privnet_as_source_accept -i eth0.11 -j ACCEPT
$IPTABLES -A privnet_as_source_accept -i eth1.22 -j ACCEPT
$IPTABLES -A privnet_as_source_accept -i eth1.33 -j ACCEPT
$IPTABLES -A privnet_as_source_accept -j DROP

.
.
.

# Allow everything which is related to an earlier action
$IPTABLES -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# ICMP forward all subtype from private network to internet
$IPTABLES -A FORWARD -o ppp0 -p icmp -j privnet_as_source_accept

# SSH
$IPTABLES -A FORWARD -o ppp0 -p tcp --dport 22   -m conntrack --ctstate NEW -j privnet_as_source_accept

# whois
$IPTABLES -A FORWARD -o ppp0 -p udp --dport 43   -m conntrack --ctstate NEW -j privnet_as_source_accept
$IPTABLES -A FORWARD -o ppp0 -p tcp --dport 43   -m conntrack --ctstate NEW -j privnet_as_source_accept

# DNS
$IPTABLES -A FORWARD -o ppp0 -p udp --dport 53   -m conntrack --ctstate NEW -j privnet_as_source_accept
$IPTABLES -A FORWARD -o ppp0 -p tcp --dport 53   -m conntrack --ctstate NEW -j privnet_as_source_accept

# HTTP
$IPTABLES -A FORWARD -o ppp0 -p tcp --dport 80   -m conntrack --ctstate NEW -j privnet_as_source_accept

输出route -vn

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.1        0.0.0.0         UG    0      0        0 ppp0
10.0.0.1        0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
10.1.0.0        0.0.0.0         255.255.0.0     U     0      0        0 eth0.111
10.2.0.0        0.0.0.0         255.255.0.0     U     0      0        0 eth1.222
10.3.0.0        0.0.0.0         255.255.0.0     U     0      0        0 eth1.333

我遗漏了什么?为什么我无法从 VLAN 中的客户端计算机访问互联网?

答案1

你开启了ip转发吗?

您可以使用以下命令进行检查:

# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

返回值为 0 表示未启用转发,而返回值为 1 表示已启用转发。这可以在 /etc/sysctl.conf 文件中永久设置。ipv4 和 ipv6 有单独的设置。使用以下命令在进行更改后重新加载配置文件:

# sysctl -p

更多信息请访问此处: 如何将我的 Linux 机器设置为路由器来转发 IP 数据包?

可能还有使用 systemd 引入的特定设置,但我尚未证实这一点。有关更多信息,请参阅此链接:https://serverfault.com/questions/753977/how-to-properly-permanent-enable-ip-forwarding-in-linux-with-systemd

相关内容