我通过华为 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