Есть CentOS.
На ней стоит openvpn сервер, к которому коннектится один клиент.
Получается два интерфейса: eth0 и tun0.
Вот такой нехитрый набор правил.
Код: Выделить всё
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6714106:4959556549]
:RH-Firewall-1-INPUT - [0:0]
[17:1019] -A INPUT -p gre -j ACCEPT
[7646818:2173485262] -A INPUT -j RH-Firewall-1-INPUT
[9952937:5896139574] -A FORWARD -j RH-Firewall-1-INPUT
[198:422955] -A RH-Firewall-1-INPUT -i lo -j ACCEPT
[12976730:6555466094] -A RH-Firewall-1-INPUT -i eth0 -j ACCEPT
[4622827:1513735787] -A RH-Firewall-1-INPUT -i tun0 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p esp -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p ah -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p gre -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p udp -m udp --dport 123 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
[0:0] -A RH-Firewall-1-INPUT -p gre -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [501386:35305754]
:POSTROUTING ACCEPT [13:768]
:OUTPUT ACCEPT [28023:1987182]
[235952:14953770] -A POSTROUTING -o eth0 -j MASQUERADE
COMMITС Линуксом работаю недавно, после фришного ipfw перейти на осмысление iptables как то сложновато.
Не понятен такой момент. НАТ работает. Пакеты с tun0 как положено модифицируются и выходят с внешнего адреса сервака, обратный трафик тоже входит легко и непринужденно.
Но как только клиент пытается подцепиться к некоторому PPTP-серваку, трафик по tcp:1723 идет двунаправленный, а gre-пакеты идут только наружу, ответы, как показал tcpdump в обратку идут, но не проходят eth0 или недоходят до tun0.
Просветите, пожалуйста, как такое может быть? В чем принципиальная разница между прохождением tcp пакета и gre-пакета?