![客户端获取 LAN IP 但无法上网](https://linux22.com/image/1148177/%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%8E%B7%E5%8F%96%20LAN%20IP%20%E4%BD%86%E6%97%A0%E6%B3%95%E4%B8%8A%E7%BD%91.png)
我偶然发现了一个相当具体的问题,但我没有知识可以自己解决它。我设置了一个 Ubuntu 服务器 (16.04.2),它将充当路由器。到目前为止,我已经配置了两个网络接口,WAN 和 LAN。DNS 也正常工作,客户端获取本地 IP 地址但无法访问互联网,这可能是由于防火墙规则配置错误造成的。注意:端口转发也已启用。
配置文件
enp0s3 Link encap:Ethernet
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:28 errors:0 dropped:0 overruns:0 frame:0
TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
enp0s8 Link encap:Ethernet
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2190 errors:0 dropped:0 overruns:0 frame:0
TX packets:41 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
接口
#WAN
auto enp0s3
iface enp0s3 inet dhcp
#LAN
auto enp0s8
iface enp0s8 inet static
address 192.168.0.1
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
路由
Destination Gateway Genmask Flags Metric Ref Use
Iface
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 enp0s3
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s8
Iptables -L -v&Iptables -t nat -L -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- lo any anywhere anywhere
3 704 ACCEPT all -- enp0s8 any anywhere anywhere
12 997 ACCEPT all -- enp0s3 any anywhere anywhere ctstate RELATED,ESTABLISHED
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- enp0s8 enp0s3 anywhere anywhere
0 0 ACCEPT all -- enp0s3 enp0s8 anywhere anywhere ctstate RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT 12 packets, 904 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 1 packets, 48 bytes)
pkts bytes target prot opt in out source destination
7 520 MASQUERADE all -- any enp0s3 anywhere anywhere
rc.本地
我使用 rc.local 文件在启动后使用这些行。
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i enp0s8 -j ACCEPT
iptables -A INPUT -i enp0s3 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT
iptables -A FORWARD -i enp0s3 -o enp0s8 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
客户端 ifconfig
enp0s3 flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.255
RX packets 8
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 221
TX errors 0 dropped 0 overrunes 0 carrier 0 collisions 0
有人能帮我解释一下我遗漏了什么吗?我不得不从几个终端输入所有内容,所以可能会有错误。如果有必要,我会继续进行更正。
致谢!
答案1
您似乎有很多拼写错误。或者,如果它们不是拼写错误,那么它们就是您配置中的错误,这可以部分解释为什么事情对您来说无法正常工作。为了获得有意义的帮助,最好复制并粘贴文件内容或命令结果,而不是尝试在问题中输入所有内容。
我认为您的基本问题是您没有正确配置机器以使其作为路由器运行。要用作双网卡“路由器”,LAN 上所有流量的默认网关都需要转到 WAN IP,在您的情况下,WAN IP 似乎是 enp0s3。
还请注意,根据定义,10.xxx(和 192.168.0.0/16)IP 地址是不可路由的。我期望路由器面向 Internet 的子网会有一个注册的 IP 地址,除非它的流量位于所有流量都进入另一个调制解调器或路由器的子网上。
假设我看到的您发布内容中的错误确实是拼写错误而不是配置错误,那么您构建的内容似乎更像是桥接器/数据包转发器而不是路由器。您配置的 WAN 看起来更像是另一个 LAN 子网,因此我对流量无法进入互联网并不感到惊讶。
由于您尚未安装任何路由器软件,并且路由器通常至少有三个接口(不包括 DMZ),因此您将通过路由表控制配置中的所有路由。您可以使用以下命令添加路由
route add
使用起来非常简单,如果你犯了错误,你可以用命令删除路线
route del
此命令的手册页相对来说一目了然。如果不知道您的计算机如何实际连接到互联网,我无法提供可行配置的示例。
这是一种过于简单的说法,但基本上,enp0s3 是一个可从 Internet 访问的 C 类 IP 地址。enp0s8 是一个您自己发明的子网(例如 192.168.0.1/24),其中分配给 enp0s3 的 IP 地址是默认网关。
您可以通过输入以下内容来验证您的路由表
route -n