[iptables, nat] outgoing interface defineren

Pagina: 1
Acties:

  • decramy
  • Registratie: December 2001
  • Nu online

decramy

root@birdie:~#

Topicstarter
Ik heb op een server een firewall draaien die iptables draait en dmv masquerade kan ik dan nog het internet op ook :) geweldig :)

We hebben in ons gebouw ook een groep huurders. Die willen zelf hun netwerk beheren, dus maak ik voor hun een extra netwerk; andere switch, nieuw netwerkkaartje in firewall, en zo een gateway voor ze gemaakt :) werkt allemaal prachtig!

Maar nu wil ik hun uitgaande verkeer eigenlijk van een ander IP hebben dan dat wij naar buiten gaan. (Ik heb de beschikking over 16 ip`s alhier) Mochten er ooit problemen komen, hoeven we alleen maar te vragen welk IP die kattekwaad heeft uitgehaald en kunnen we dat bij de huurder neerleggen. Of er ooit kattekwaad komt, geen idee, maar meneer de systeembeheerder (ik) wil proactief bezig zijn

Gegevens:
eth0/195.86.xxx.xxx = internet
eth0:5 = 195.86.xxx.xxy = ander ip @ internet
eth3/192.168.120.0/24 = huurder

Ik gebruik nu dit:
code:
1
2
3
4
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.120.1 -j ACCEPT
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth3 -o eth0 -j ACCEPT


oplossingen?
als ik simpelweg overal eth0 vervang door eth0:5 zegt ie dat geen aliases wil:
code:
1
Warning: weird character in interface 'eth0:5' (No aliases, :, ! or *).


Toen heb ik overal '-o eth0' vervangen door '-d 195.86.xxx.xxy'
Dan geeft ie geen errors, maar internetten lukt niet echt... Helaas...

Zo heb ik ongeveer alles wel gehad met -i, -o, -s en -d

Is er ook een andere oplossing die wel werkt?

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Wat dacht je van SNAT? En voor extra ip's aan een interface hebben we tegenwoordig ook /sbin/ip zodat je niet met (onhandige) extra interfaces hoeft te werken.

  • decramy
  • Registratie: December 2001
  • Nu online

decramy

root@birdie:~#

Topicstarter
ja, ik zie net op http://www.linuxtopia.org/Linux_Firewall_iptables/x4658.html dit voorbeeld staan:
code:
1
iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000


mijn interpetatie is daar dit van:
code:
1
iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 195.86.xxx.xxy


hiermee kan ik idd het internet op, maar nog steeds als .xxx en niet als .xxy :(

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


  • nzyme
  • Registratie: November 2001
  • Laatst online: 28-12-2025

nzyme

terror

als ik me niet vergis is dat dus de eerste stap in het vervangen van masquerade... :) het doet hetzelfde maar is veel geavanceerder (als ik me niet vergis)

wat jij wil is geloof ik dus het volgende:

eth0 - Naar het internet
eth1 - Jouw netwerk
eth2 - Het nieuwe netwerk

Al het verkeer van jou netwerk moet via eth0 naar internet kunnen als IP_X en het verkeer van het nieuwe netwerk moet datzelfde doen vanaf IP_Y.

dus iets van dit:
code:
1
2
3
4
if (iprange == ABC)
ipadr = X
if (iprange == DEF)
ipadr = Y;

maar dan in iptables

edit:
code:
1
2
3
iptables -A POSTROUTING -t nat -o $IFACE_INET -j SNAT --to $IP_INET
iptables -A FORWARD -i $IFACE_LAN -o $IFACE_INET -s $RANGE_LAN -d ! $RANGE_LAN -j ACCEPT
iptables -A FORWARD -o $IFACE_LAN -i $IFACE_INET -d $RANGE_LAN -s ! $RANGE_LAN -j ACCEPT


deze regels zijn voor gewoon verkeer zonder firewall toeters en bellen over slechts 2 interfaces. Hier moet je denkik uit verder bouwen.

edit:
code:
1
2
iptables -A POSTROUTING -t nat -o $IFACE_INET -i $IFACE_MY_NET -j SNAT --to $IP_INET_X
iptables -A POSTROUTING -t nat -o $IFACE_INET -i $IFACE_NEW_NET -j SNAT --to $IP_INET_Y

:? heb niet de mogelijkheid om de syntax te checken maar als je "-i" hier en zo mag inzetten lijkt dit wel ergens op geloof ik :)

edit:
/me heeft die mogelijkheid natuurlijk wel |:(
iptables v1.3.3: Can't use -i with POSTROUTING

Try `iptables -h' or 'iptables --help' for more information.
dus mss met PREROUTING ?

[ Voor 109% gewijzigd door nzyme op 07-06-2006 21:17 ]

| Hardcore - Terror |


  • decramy
  • Registratie: December 2001
  • Nu online

decramy

root@birdie:~#

Topicstarter
Ja, dit is wat ik wil :)

en met PREROUTING zegt ie dat ie geen -o heeft, wat vrij logisch is... (pre wordt gerunt voor outgoing iface ;) )

dus heb ik met deze regel eens geprobeerd:
code:
1
2
3
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to $ANDER_IP
iptables -A FORWARD -i $IFACE_LAN -o $IFACE_INET -s $RANGE_LAN -d ! $RANGE_LAN -j ACCEPT
iptables -A FORWARD -o $IFACE_LAN -i $IFACE_INET -d $RANGE_LAN -s ! $RANGE_LAN -j ACCEPT

hiermee kwam ik wel het internet op, maar niet als $ANDER_IP

ik heb ook de default policies van PREROUTING, POSTROUTING en OUTPUT (nat) op accept staan... heeft dit te maken met het feit dat dit dan al eerder wordt geaccepteert en dan 'anders' wordt gerewrite...?

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


  • nzyme
  • Registratie: November 2001
  • Laatst online: 28-12-2025

nzyme

terror

hm das vreemd :-/ vergeet trouwens niet iptables -F te doen om voorgaande rules te flushen ;) altijd handig wanneer je denkt dat het werkt maar dat later toch niet zo is :p

verder:
default policy is het standaard gedrag voor een ruleset. Bijvoorbeeld de FORWARD policy, zet je deze op DROP hoef je alleen te definieren wat je WEL wil toestaan. Zet je die op ACCEPT moet je alles zelf droppen m.u.v. wat jij wel wil forwarden dus.

in dit geval is het op ACCEPT laten wel aan te raden, het DROPPEN komt later wel als je aan het firewall stuk wilt sleutelen :)

| Hardcore - Terror |


Verwijderd

Ik betwijfel of dit met alleen iptables gaat werken. Je zou het volgende eens kunnen proberen (ongetest en waarschijnlijk niet 100% correct):

maak extra routing tables aan:
code:
1
echo "2  huurder" >> /etc/iproute2/rt_tables


koppel routes aan de nieuwe table:
code:
1
2
ip route add $net_ext dev $if_ext src $ip_ext_huurder table huurder
ip route add default via $gw_ext dev $if_ext table huurder


markeer inkomende packets van het huurder netwerk:
code:
1
2
iptables -A PREROUTING -i $if_int_huurder -t mangle \ 
-s $net_huurder -j MARK --set-mark 0x2


koppel gemarkeerde packets aan huurder table:
code:
1
2
ip rule add from $ip_ext_huurder table huurder
ip rule add fwmark 0x2 table huurder


en natuurlijk de usual suspects:
code:
1
2
3
iptables -t nat -A POSTROUTING -o $if_ext -s $net_huurder \ 
-j SNAT --to-source $ip_ext_huurder
echo 1 > /proc/sys/net/ipv4/ip_forward


Bij binnenkomst van een packet van het netwerk van je huurder wordt er nu een vlag (in dit geval 0x2) aan het packet gehangen. Deze vlag blijft bewaard zolang het packet binnen de kernel verblijft. Deze vlag wordt later gebruikt om een routing beslissing te nemen, wat niet kan met alleen netfilter...

Zie ook:

http://lartc.org/howto/lartc.rpdb.html
en
http://lartc.org/howto/lartc.rpdb.multiple-links.html

Nogmaals, waarschijnlijk moet je hier nog 't een en ander aan tweaken :-)

  • nzyme
  • Registratie: November 2001
  • Laatst online: 28-12-2025

nzyme

terror

hier zat ik ook al aan te denken, om ze te marken op een of andere manier :-| natuurlijk :)

iig, dit klinkt goed maar 1 klein ding: "2 huurder" is niet zo netjes, probeer het liefste niet met een getal te beginnen en altijd een "-" of "_" te gebruiken (lees: alles behalve een spatie).
Beetje gezeik ik weet het maar het is zo veel prettiger :)

| Hardcore - Terror |


Verwijderd

nee, ik bedoelde: routing table met nummer "2" en naam "huurder"
De syntax van rt_tables is: "<ID><space><NAAM>"
De volgende twee commando's zijn in dit geval dus synoniem:

code:
1
2
ip route list table 2
ip route list table huurder


of natuurlijk:
code:
1
ip r l t 2

:P

een spatie in de naam van een routing table zou ik inderdaad ook niet aanraden :)

  • decramy
  • Registratie: December 2001
  • Nu online

decramy

root@birdie:~#

Topicstarter
ok, ik heb weer even buiten kantoortijden mogen klooien, jehh

Ik heb ongeveer overgenomen wat LPK schreef waarvoor hartelijk dank! maar ik krijg errors...

code:
1
RTNETLINK answers: Invalid argument

Heb ik dan een kernel module niet aan staan?

20*375Wp met Enphase IQ7+ micro's | Stiebel Eltron HGE Water/Water WP 9kW | Tesla M3, powered by SmartEVSE | Servertje @ www.coloclue.net


Verwijderd

Dit is wsch de traagste thread ooit :-)

Enfin, ik denk niet dat je een module mist. Bij welke stap/commando krijg je deze error?
Pagina: 1