如何为本地路由器机器设置 iptables?

如何为本地路由器机器设置 iptables?

我已经将本地 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是防火墙面向客户端的地址。

相关内容