Сервер не хочет работать как шлюз [SOLVED]
gentooman 12 мая, 2010 - 11:02
Привет всем.
При настройке граничного сервера возникла проблема с NATом. iptables не пропускает пакеты во внешнюю сеть.
интерфейс eth0 - локальная сеть, 192.168.0.100
интерфейс eth1 - внешка, через роутер, 192.168.1.100. Роутер 192.168.1.3
rules-save:
# Generated by iptables-save v1.4.3.2 on Tue May 11 18:20:28 2010 *raw :PREROUTING ACCEPT [492580053:315870131833] :OUTPUT ACCEPT [486590949:699392723817] COMMIT # Completed on Tue May 11 18:20:28 2010 # Generated by iptables-save v1.4.3.2 on Tue May 11 18:20:28 2010 *nat :PREROUTING ACCEPT [18523526:2056689826] :POSTROUTING ACCEPT [9377843:856100067] :OUTPUT ACCEPT [31950154:2989114079] [3:276] -A POSTROUTING -s 192.168.0.0/24 -d 86.57.151.0/27 -o eth1 -j SNAT --to-source 192.168.1.3 COMMIT # Completed on Tue May 11 18:20:28 2010 # Generated by iptables-save v1.4.3.2 on Tue May 11 18:20:28 2010 *mangle :PREROUTING ACCEPT [492580052:315870144312] :INPUT ACCEPT [483583572:314174892272] :FORWARD ACCEPT [8796604:1684064349] :OUTPUT ACCEPT [486590913:699392730524] :POSTROUTING ACCEPT [495406662:701082785178] COMMIT # Completed on Tue May 11 18:20:28 2010 # Generated by iptables-save v1.4.3.2 on Tue May 11 18:20:28 2010 *filter :INPUT ACCEPT [388676050:286937159990] :FORWARD ACCEPT [84208:4836879] :OUTPUT ACCEPT [486590869:699392723010] [3344958:605252014] -A INPUT -i eth1 -j ACCEPT [18421:12528151] -A INPUT -i eth1 -p tcp -m multiport --dports 6666,6881 -j ACCEPT [24:2062] -A INPUT -i eth1 -p udp -m multiport --dports 6666,6881 -j ACCEPT [38194:1842704] -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu [538789:365788344] -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT [3973106:219802057] -A FORWARD -i eth0 -o eth1 -j ACCEPT [259767:77546751] -A FORWARD -d 192.168.0.0/24 -i eth1 -j ACCEPT COMMIT # Completed on Tue May 11 18:20:28 2010
sysctl.conf
# /etc/sysctl.conf # # For more information on how this file works, please see # the manpages sysctl(8) and sysctl.conf(5). # # In order for this file to work properly, you must first # enable 'Sysctl support' in the kernel. # # Look in /proc/sys/ for all the things you can setup. # # Disables packet forwarding net.ipv4.ip_forward = 1 # Disables IP dynaddr net.ipv4.ip_dynaddr = 1 # Disable ECN net.ipv4.tcp_ecn = 1 # Enables source route verification net.ipv4.conf.default.rp_filter = 1 # Enable reverse path net.ipv4.conf.all.rp_filter = 1 # Enable SYN cookies (yum!) # http://cr.yp.to/syncookies.html #net.ipv4.tcp_syncookies = 1 # Disable source route #net.ipv4.conf.all.accept_source_route = 0 #net.ipv4.conf.default.accept_source_route = 0 # Disable redirects net.ipv4.conf.all.accept_redirects = 1 net.ipv4.conf.default.accept_redirects = 1 # Disable secure redirects net.ipv4.conf.all.secure_redirects = 1 net.ipv4.conf.default.secure_redirects = 1 # Ignore ICMP broadcasts #net.ipv4.icmp_echo_ignore_broadcasts = 1 # Disables the magic-sysrq key #kernel.sysrq = 0 # When the kernel panics, automatically reboot in 3 seconds #kernel.panic = 3 # Allow for more PIDs (cool factor!); may break some programs #kernel.pid_max = 999999 # You should compile nfsd into the kernel or add it # to modules.autoload for this to work properly # TCP Port for lock manager #fs.nfs.nlm_tcpport = 0 # UDP Port for lock manager #fs.nfs.nlm_udpport = 0
Что я делаю не так?
»
- Для комментирования войдите или зарегистрируйтесь
eth0 - локальная сеть,
eth0 - локальная сеть, 192.168.0.100
eth1 - внешка, через роутер, 192.168.1.100
Скрипт
#!/bin/bash
IPT='/sbin/iptables'
LAN=eth0
LAN_IP=192.168.0.100
LAN_NET=192.168.0.0/24
WAN=eth1
WAN_IP=192.168.1.100
WAN_NET=192.168.1.0/24
echo 1 > /proc/sys/net/ipv4/ip_forward
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done
$IPT -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m conntrack --ctstate NEW -i ${LAN} -s 192.168.0.0/24 -j ACCEPT # Форвардить новые соединения приходящие с интерфейса LAN с адресами 192.168.0.0/24
$IPT -P FORWARD DROP # все остальные в сад!
$IPT -t nat -F POSTROUTING # очистим POSTROUTING
$IPT -t nat -A POSTROUTING -o ${WAN} -j SNAT --to-source ${WAN_IP} # все что идет на eth1 подменять на 192.168.1.100
как то так
Спасибо, помогло!!!
Спасибо, помогло!!!
gentooman написал(а): Привет
Я, например, не совсем понял как у вас устроена сеть.
1) 192.168.1.3 - это случайно не ADSL модем или какой-нибудь маршрутизатор провайдера?
2) У сети 192.168.0.100 какая маска? 24 бита на сеть (255.255.255.0)?
3) 192.168.1.100 - это адрес интерфейса вашего сервера в локальной сети, который предположительно соединен вторым интерфейсом в ADSL модемом?
Если на все вопросы ответ ДА, тогда вам по всей видимости достаточно только этих правил фильтрации:
iptables -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
А POSTROUTING удалите.
Справедливость восторжествует.