Я настроил локальный компьютер с Linux (14.0.4 Ubuntu) в качестве маршрутизатора и могу делать следующее:
Но не могу пинговать гугл или 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
Соответствующий раздел файла журнала можно найти Вот.
У клиента нет маршрута по умолчанию через ваш маршрутизатор. Пытаться
route add -net default gw a.b.c.d
на клиенте, где a.b.c.d
это клиентский адрес брандмауэра.
Ну, ваша конфигурация кажется коротковатой. Прилагаю конфигурацию своего роутера в качестве рабочего примера.
Кроме того, вы используете «-m state» для отслеживания связанных и установленных соединений, в то время как я обычно использую «-m conntrack».
Что вы можете попробовать - зарегистрировать отброшенные пакеты и посмотреть, что и почему сбрасывает iptables. Я пишу свою конфигурацию (с ведением журнала, а также включая политику ACCEPT по умолчанию для цепочки OUTPUT) ниже. Чтобы включить его, сохраните его в файл (например, «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