我已经将本地 Linux(14.0.4 Ubuntu)机器设置为路由器,并可以执行以下操作:
- 从客户端 ping 服务器/路由器
- 从服务器/路由器 ping 客户端
- 从另一个客户端 ping 一个客户端
对服务器/路由器后面的调制解调器/路由器执行 ping 操作
但我无法 ping google 或 8.8.8.8。我收到以下错误:
ping: unknown host www.google.com
connect: network is unreachable
但是我能在服务器/路由器上发出这两个命令都没有问题,这让我相信这是一个iptables
相关问题。有人可以看一下我用来初始化 iptables 的以下代码,并告诉我是否有任何明显的错误。
#!/bin/bash
ethInternal=eth1
ethExternal=eth0
sudo iptables --flush
sudo iptables --table nat --flush
sudo iptables --delete-chain
sudo iptables --table nat --delete-chain
sudo iptables -t nat -A POSTROUTING -o $ethExternal -j MASQUERADE
sudo iptables -A FORWARD -i $ethExternal -o $ethInternal -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i $ethInternal -o $ethExternal -j ACCEPT
编辑1
client: netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
192.168.66.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
编辑2
client: route add -net default gw 192.168.66.254
client: netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.66.254 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
192.168.66.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
编辑3
SV-01: vi /var/log/kern.log
可以找到日志文件的相关部分这里。
答案1
嗯,你的配置似乎有点短。我附上了我的路由器的配置作为工作示例。
此外,您使用“-m state”来跟踪相关和已建立的连接,而我通常使用“-m conntrack”。
您可以尝试记录丢弃的数据包,并查看 iptables 丢弃了哪些数据包以及丢弃的原因。我正在下面编写我的配置(包括日志记录,还包括 OUTPUT 链的默认 ACCEPT 策略)。要启用它,请将其保存到文件(例如“iptables_test_rules.txt”)并使用“iptables-restore iptables_test_rules.txt”应用它们。请参阅“iptables -L -v”了解规则概述,并查看系统日志以了解丢弃的连接(注意:系统日志可能会增长得非常快!)。
*filter
# 1. Logging.
# 1.1. logdrop chain
-N logdrop
-A logdrop -j LOG --log-prefix "dropped: "
-A logdrop -j DROP
# 2. Set default policies for INPUT, OUTPUT and FORWARD chains
-P INPUT DROP
-P OUTPUT ACCEPT
-P FORWARD DROP
# 3. INPUT CHAIN
# 3.0. Allow loopback
-A INPUT -i lo -j ACCEPT
# 3.1. Allow already established connections
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# 3.2. log and drop invalid packets
-A INPUT -m conntrack --ctstate INVALID -j logdrop
# 3.3. Allow DHCP renew on eth0
-A INPUT -p udp -m udp --dport 68 -i eth0 -j ACCEPT
# 3.4. Allow any connections from lan
-A INPUT -i eth1 -j ACCEPT
# 3.5. Log and drop the rest
-A INPUT -j logdrop
# 4. Forwarding
# 4.0. Allow forwarding from lan to wan
-A FORWARD -i eth1 -o eth0 -j ACCEPT
# 4.1. Allow forwarding from lan to lan
-A FORWARD -i eth1 -o eth1 -j ACCEPT
# 4.2. Allow forwarding from wan to lan, but only for already established connections
-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 4.4. log and drop the rest in FORWARD chain
-A FORWARD -j logdrop
COMMIT
*nat
# Set default NAT policies to accept
-P PREROUTING ACCEPT
-P POSTROUTING ACCEPT
-P OUTPUT ACCEPT
# 5. NAT
# 5.1. Enable NAT
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*raw
COMMIT
答案2
客户端没有通过路由器盒的默认路由。尝试
route add -net default gw a.b.c.d
在客户端上,a.b.c.d
是防火墙面向客户端的地址。