[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Trixa med ipchains...



Jag har följande scenario:
* Ett LAN med ett antal datorer och gadgets på
* En NSLU2 som kör Debian och som agerar brandvägg/router (och dessutom DNS-/DHCP-server etc, men det är inte relevant nu) * En domän (ihse.net) där jag har skapat adresser för specifika tjänster (t.ex. wiki.ihse.net, mail.ihse.net). * Jag gör port forwardning från min NSLU2 (som heter Jana) på t.ex. port 80 och 443 till en mer kraftfull dator inne på nätet (som heter Vesta) som har en Apache. * På Vesta har jag konfigurerat upp virtuella servrar, så att man kommer till webbmail om man surfar till mail.ihse.net och en wiki för wiki.ihse.net. * Dessa virtuella hostar har i DNS:en samma IP-adress, nämligen min externa IP-adress.

Resultatet av denna konfiguration är att det går alldeles utmärkt att sitta nånstans på Internet och komma åt olika tjänster på mail.ihse.net och wiki.ihse.net.

Men.

Det går inte att komma åt tjänsterna på insidan av LAN:et. Eftersom wiki.ihse.net resolverar till min externa adress, kommer anropet från insidan av LAN:et att riktas till Jana (routern). Den ser att anropet kommer från insidan av LAN:et och försöker inte göra någon port forwarding. Istället får jag reda på att ingen lyssnar på port 80 på den adressen.

Så, hur löser man detta? Jag har hittills gjort så att jag fuskat, och lagt in en rad för wiki.ihse.net som resolverar till Vesta:s adress i /etc/hosts på alla maskiner på LAN:et. Det har fungerat men känts lite hackigt. Nu har jag precis skaffat en Nokia N810 (grymt kul pryl, f.ö.! :-)) och min fru en laptop, och då blev det plötsligt uppenbart hur otillräcklig en sådan lösning är -- eftersom WLAN:et är på insidan av routern, så måste man ändra i /etc/hosts varje gång man tar N810:an/laptopen innanför eller utanför lägenheten. Det duger inte.

Så jag är tillbaka nu på att försöka lösa problemet på ett bättre sätt. Men fasen vet hur. Två idéer: 1) Ändra så att DNS-servern lämnar ut olika adressuppgifter för wiki.ihse.net om förfrågan kommer inifrån LAN:et än utifrån.

2) Ändra ipchains-reglerna på routern, så att den gör som jag vill.

Som jag förstått är det är 1) knepigt att få till och lite läskigt; jag vill ju inte att jag plötsligt börjar sitta och berätta för omvärlden att wikin ligger på 192.168... Alltså har jag satsat på 2.

Men det är inte lätt. Jag har suttit och slitit lite med dokumentationen för ipchains, men jag får ingen rätsida på hur jag ska göra. Det brukar sluta med att Jana äter upp mina utgående accesser på port 80 vilket inte är riktigt vad jag tänkt mig. :-)

Jag använder ett handhackat skript för att sätta upp mina nuvarande ipchains-regler. Så här ser de relevanta delarna ut just nu:
---
INSIDE=eth0
OUTSIDE=eth1
EXTERNAL_IP=77.110.63.65

# Load firewalling modules
modprobe iptable_filter
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ipt_LOG
modprobe ipt_state

# Load masquerading module
modprobe iptable_nat

## Waste any previous iptables setup, and create new chain
iptables -F
iptables -X
iptables -F -t nat
iptables -X -t nat
iptables -N jwall

# Accept new connections from the inside
iptables -A jwall -m state --state NEW -i ! $OUTSIDE -j ACCEPT

# Accept all packets belonging to open connections
iptables -A jwall -m state --state ESTABLISHED,RELATED -j ACCEPT

# Accept IDENT packets
iptables -A jwall -p TCP --destination-port ident -j ACCEPT

# Accept ICMP packets
iptables -A jwall -p ICMP -j ACCEPT

# Ignore (drop) DHCP DISCOVER (?) packets
iptables -A jwall -p UDP --source-port bootpc -d 255.255.255.255 --destination-port bootps -j DROP

# Accept DNS
iptables -A jwall -p UDP --destination-port domain -j ACCEPT
iptables -A jwall -p TCP --destination-port domain -j ACCEPT

# Drop the rest
iptables -A jwall -j DROP

## Jump to our new chain from the INPUT and FORWARD chains
iptables -A INPUT -j jwall
iptables -A FORWARD -j jwall

# Portforward http to vesta
HTTPFORWARDADDR=192.168.0.12
HTTPPORT=80

iptables -t nat -A PREROUTING -i $OUTSIDE -p tcp --dport $HTTPPORT -j DNAT --to-destination $HTTPFORWARDADDR iptables -t nat -A PREROUTING -i $OUTSIDE -p udp --dport $HTTPPORT -j DNAT --to-destination $HTTPFORWARDADDR
iptables -I FORWARD -i $OUTSIDE -p tcp --dport $HTTPPORT -j ACCEPT
iptables -I FORWARD -i $OUTSIDE -p udp --dport $HTTPPORT -j ACCEPT
---
Jag blir inte klok på hur jag ska göra för att få till det här. Någon som kan hjälpa till?

/Magnus


Reply to: