Missa inte Amazon Primedays i Dagens fynd

Policybaserad routing med Net/OpenBSD?

Permalänk
Medlem

Policybaserad routing med Net/OpenBSD?

Jag har bestämt mig för att skaffa en dedikerad brandvägg/proxy, och har funderat på att köra NetBSD eller OpenBSD på den. Dels för att bli lite mer bekant med *BSD, men mycket för att PF är trevligt.
Ett stort frågetecken finns dock, jag behöver kunna använda mig av policybaserad routing, som jag idag gör med iproute2 i Linux.
Har letat lite, men har inte riktigt hittat något som verkar motsvara det till *BSD. Tycker ju att det borde finnas?

Permalänk

Kan du beskriva lite mer vad du gör med iproute2?

Permalänk
Medlem

Visst. Jag har en burk med ett antal externa adresser, på ett antal interface, som alla ligger på samma subnät, och jag vill NAT:a dessa adresser till olika maskiner bakom denna. Har tyvärr inte hittat någon annan lösning än att använda ett separat fysiskt interface till varje adress, eftersom jag får dem via DHCP (BBB).
Mina regler med iproute2 ser för tillfället ut såhär:

november:~# ip ru ls
0: from all lookup local
32763: from 213.xxx.0.84 lookup eth2
32764: from 192.168.1.6 lookup eth2
32765: from 213.xxx.0.83 lookup eth1
32766: from all lookup main
32767: from all lookup default
november:~# ip ro ls tab eth1
192.168.1.0/24 dev eth0 scope link
default via 213.xxx.0.65 dev eth1
november:~# ip ro ls tab eth2
192.168.1.0/24 dev eth0 scope link
default via 213.xxx.0.65 dev eth2

Permalänk
Medlem

Går inte att ha flera dhcp ip-adresser till samma interface pga att dhcp har massa broadcast tjohej för sig.

Ummm? Kollar det där up ip-adresser för ngt? Dig själv?
Kan du förklara för mig utan exempel vad dina ip-tables regler gör, har aldrig lärt mig ip-tables och jag ångrar det verkligen inte.

Permalänk
Medlem

kan göra så här typ:

nat on $ext_if from $int_ip1 to any -> $ext_ip1
nat on $ext_if from $int_ip2 to any port 2222 -> $ext_ip2
nat on $ext_if from $int_net to any -> ext_ip2

tänk på att pf alltid läser uppifrån så lägg inte default nat överst

vet dock inte om jag uppfattade det du ville göra korrekt men hoppas exemplen hjälper.

Permalänk

Mmm, men problemet var väl (som jag förstod det) att få dhcp-tilldelade adresser till ett antal klonade interface?

Jag kör själv nat under OpenBSD där fem interna subnät mappas mot fem externa ip:n. Nat-reglerna är enkla:

nat on $ext_if from $int_net1 to any -> $ext_ip1 nat on $ext_if from $int_net2 to any -> $ext_ip2 nat on $ext_if from $int_net3 to any -> $ext_ip3 nat on $ext_if from $int_net4 to any -> $ext_ip4 nat on $ext_if from $int_net5 to any -> $ext_ip5

Pf läser alltid uppifrån, men det är sista matchande regel som gäller (undantaget quick)

I mitt fall sker allt på ett och samma fysiska interface med vlan för de olika näten. De externa ip-adresserna är dock manuellt tilldelade.

Permalänk
Medlem

DHCP-leases är kopplade till MAC-adressen, så om ett nätverkskort som redan fått en IP-adress frågar efter en till, kommer den bara bli tilldelad samma.
Det kanske finns nån häxkonst för att låta ett nätverkskort fejka flera MAC-adresser, men det låter som en dum ide.

Är det möjligt att skapa ett loopback-interface och ge det en adress via DHCP, förresten?

Visa signatur

Min dator är tuffare än din.

Permalänk
Medlem

Äsch tvinga bara din ISP att gå över till IPv6 så har du tillräckligt med ip-adresser XD

Permalänk
Medlem

Nåja, släpp biten med DHCP och det. För att lägga upp enklast möjliga scenario, jag har en maskin med fyra externa interface, fyra externa adresser, alla på samma subnät, och dessa vill jag NAT:a till fyra maskiner bakom denna maskin. Så långt inga problem alls, bara att lägga en NAT-regel (prerouting i iptables, är som sagt inte alls särskillt hemma på PF).
Problemet kommer ju sen när den NAT:ade maskinen ska vara, alternativ själv etablera en förbindelse. Med vanlig routing kommer ju allt att gå via vad som är specat som default gateway, vilket alltså kommer bli det första interfacet. Det är därför jag behöver använda dessa policyregler, för att kunna speca att maskin 1 går via interface 1 ut, maskin 2 går via interface 2 ut osv.

Razor-SWE's exempel där ser ut att kanske göra det jag vill?

Permalänk

Blir det verkligen så? I exemplet ovan nat:as olika nät/maskiner på olika ip:n, så att de hålls separerade.

Permalänk
Medlem

Hmm, hur menar du nu?
I min setup blir det i alla fall så att maskinen själv pratar med omvärlden från eth1, adressen som slutar på 83 då. Maskinen bakom, 192.168.1.6 skickar allt via eth2, från adressen som slutar på 84.
All trafik från mitt övriga LAN ska gå via eth3, osv.
Är jag för otydlig?

Permalänk
Medlem

Om jag förstår dig rätt så har du hjälp av binat.

http://www.openbsd.org/faq/pf/nat.html#binat

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av nillon
Hmm, hur menar du nu?
I min setup blir det i alla fall så att maskinen själv pratar med omvärlden från eth1, adressen som slutar på 83 då. Maskinen bakom, 192.168.1.6 skickar allt via eth2, från adressen som slutar på 84.
All trafik från mitt övriga LAN ska gå via eth3, osv.
Är jag för otydlig?

pf natar alltid först, så om du sätter korrekta nat regler får paketen från rätt ip innan reglerna. Om du vill styra rätt externa ip till rätt interface kan du använda dig av förljande:

pass out on $ext_if2 route-to $ext_if from $ext_ip1 to any keep state
pass out on $ext_if route-to $ext_if2 from $ext_ip2 to any keep state

där ext_if har ip ext_ip o ext_if2 har ip ext_ip2, detta för att se till att inget paket går vilse eftersom du har samma subnät på alla if:en.

Permalänk
Hedersmedlem

Upptäckte genom lite experimenterande att man skall använda reply-to också ifall man vill ha serversaker på ip2, och vill att de skall svara genom samma interface som de fick requesten från.
typ..
pass in quick on $ext_if2 reply-to $ext_if2 inet proto tcp from any to any port 80 keep state
för en webserver. Annars kommer requesten in på $ext_if2 och reply går ut genom $ext_if. Visserligen funkade det så, men det ser rörigt ut.

Det här var en intressant tråd, har inte tänkt på att man kunde göra såhär med bbb.. eller jo det har jag, fast inte att det var så enkelt.

Visa signatur

I am a prototype for a much larger s󠅄󠅘󠅕󠄐󠅞󠅕󠅕󠅔󠄐󠅤󠅟󠄐󠅒󠅕󠄐󠅟󠅒󠅣󠅕󠅢󠅦󠅕󠅔󠄐󠅑󠅞󠅔󠄐󠅥󠅞󠅔󠅕󠅢󠅣󠅤󠅟󠅟󠅔󠄐󠅧󠅑󠅣󠄐󠅟󠅞󠅓󠅕󠄐󠅣󠅑󠅤󠅙󠅣󠅖󠅙󠅕󠅔󠄐󠅒󠅩󠄐󠄷󠅟󠅔󠄞󠄐󠄾󠅟󠅧󠄐󠅧󠅕󠄐󠅓󠅑󠅞󠄐󠅙󠅝󠅠󠅜󠅕󠅝󠅕󠅞󠅤󠄐󠅤󠅘󠅕󠄐󠅣󠅑󠅝󠅕󠄐󠅖󠅥󠅞󠅓󠅤󠅙󠅟󠅞󠅑󠅜󠅙󠅤󠅩󠄐󠅧󠅙󠅤󠅘󠄐󠅔󠅑󠅤󠅑󠄝󠅝󠅙󠅞󠅙󠅞󠅗󠄐󠅑󠅜󠅗󠅟󠅢󠅙󠅤󠅘󠅝󠅣󠄞ystem

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Aphex
Upptäckte genom lite experimenterande att man skall använda reply-to också ifall man vill ha serversaker på ip2, och vill att de skall svara genom samma interface som de fick requesten från.
typ..
pass in quick on $ext_if2 reply-to $ext_if2 inet proto tcp from any to any port 80 keep state
för en webserver. Annars kommer requesten in på $ext_if2 och reply går ut genom $ext_if. Visserligen funkade det så, men det ser rörigt ut.

Det här var en intressant tråd, har inte tänkt på att man kunde göra såhär med bbb.. eller jo det har jag, fast inte att det var så enkelt.

ah kanske räcker använda reply-to på in regeln. Detta senario vore iofs intressant o labba med :P, vore intressant höra om nillon fick till det tillslut.

Permalänk
Medlem

Det har kommit en del intressanta svar ja.
För tillfället har jag inte den burken som är tänkt att bli firewall hemma, men jag ska helt klart följa upp den här tråden när jag har labbat lite.

Permalänk
Medlem

Det blir ju dock lite mysko om du har fyra externa interface, alla med IP-adresser på samma subnät. När burken ska skicka till just det nätet, vilket interface ska den då skicka ut på?

Ett externt interface med flera IP-adresser på, alternativt flera externa interface med IP-adresser inom olika nät (tänk flera olika ISPer), då blir det däremot lätt.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av griff
Det blir ju dock lite mysko om du har fyra externa interface, alla med IP-adresser på samma subnät. När burken ska skicka till just det nätet, vilket interface ska den då skicka ut på?

Ett externt interface med flera IP-adresser på, alternativt flera externa interface med IP-adresser inom olika nät (tänk flera olika ISPer), då blir det däremot lätt.

Det är ju just därför jag behöver använda mig av policybaserad routing.
Som i inlägget där jag förklarar min nuvarande setup, typ "om det kommer från 192.168.1.6, skicka via eth2, annars via eth1". Kort sammanfattat är det vad jag vill göra.
Det går bra med Linux (eftersom jag kör så nu ), men jag vill kunna göra samma sak med OpenBSD, eftersom det är en förutsättning för att jag ska kunna köra det på min firewall.

Permalänk
Hedersmedlem

problemet var, märkte jag, att default gateway redan ligger på $extif så det funkade inte att börja trycka ut paket på xl1 hur som helst. de hade ingenstans att ta vägen. lyckligtvis kunde man göra såhär i pf:

$extif är mitt "normala" kort som leder till internet, xl1 är det nya.
$intnet är mitt lan. (finns på xl0)
(xl1) ersätts av pf med det angivna nätkortets ip.
$dgatew är min default-gateway.

nat on $extif inet from $intnet to any -> (xl1) rdr on xl1 inet proto tcp from any to (xl1) port 3389 tag TCPIN -> $client # route-to tar ett till argument utöver nätkortet.. "next-hop". # där stoppar vi addressen till vår gateway pass out quick on $extif route-to (xl1 $dgatew) inet from (xl1) to any keep state pass out quick on xl1 route-to (xl1 $dgatew) inet from (xl1) to any keep state pass in quick on xl1 reply-to (xl1 $dgatew) tagged TCPIN flags S/SA keep state pass in quick on xl1 reply-to (xl1 $dgatew) inet proto icmp icmp-type { 8, 3, 11 } keep state

<här följer mina vanliga pass out regler för $extif>

Så nu har jag en fullt fungerande nat för mitt lan, på ett separat ip/nätverkskort medan servern och alla program där kör vidare på det gamla som om inget hänt.

Visa signatur

I am a prototype for a much larger s󠅄󠅘󠅕󠄐󠅞󠅕󠅕󠅔󠄐󠅤󠅟󠄐󠅒󠅕󠄐󠅟󠅒󠅣󠅕󠅢󠅦󠅕󠅔󠄐󠅑󠅞󠅔󠄐󠅥󠅞󠅔󠅕󠅢󠅣󠅤󠅟󠅟󠅔󠄐󠅧󠅑󠅣󠄐󠅟󠅞󠅓󠅕󠄐󠅣󠅑󠅤󠅙󠅣󠅖󠅙󠅕󠅔󠄐󠅒󠅩󠄐󠄷󠅟󠅔󠄞󠄐󠄾󠅟󠅧󠄐󠅧󠅕󠄐󠅓󠅑󠅞󠄐󠅙󠅝󠅠󠅜󠅕󠅝󠅕󠅞󠅤󠄐󠅤󠅘󠅕󠄐󠅣󠅑󠅝󠅕󠄐󠅖󠅥󠅞󠅓󠅤󠅙󠅟󠅞󠅑󠅜󠅙󠅤󠅩󠄐󠅧󠅙󠅤󠅘󠄐󠅔󠅑󠅤󠅑󠄝󠅝󠅙󠅞󠅙󠅞󠅗󠄐󠅑󠅜󠅗󠅟󠅢󠅙󠅤󠅘󠅝󠅣󠄞ystem

Permalänk
Medlem

Aphex: Där har vi det, ungefär likadan setup som jag kör i Linux just nu.
Fast jag får erkänna att det var lite mer meck i Linux än det där verkar vara.

Permalänk
Hedersmedlem

Eller inte..

Det här gick lite grann åt helvete faktiskt. Jag tror systemet blir förvirrat av att ha gatewayen åtkomlig på två olika interface.
Jag märkte att den ibland hoppade mellan att befinna sig på $extif och xl1 i arp- och routing tabellerna.
Orkar inte pilla mer med det nu, återkommer om jag gör nya försök.

Visa signatur

I am a prototype for a much larger s󠅄󠅘󠅕󠄐󠅞󠅕󠅕󠅔󠄐󠅤󠅟󠄐󠅒󠅕󠄐󠅟󠅒󠅣󠅕󠅢󠅦󠅕󠅔󠄐󠅑󠅞󠅔󠄐󠅥󠅞󠅔󠅕󠅢󠅣󠅤󠅟󠅟󠅔󠄐󠅧󠅑󠅣󠄐󠅟󠅞󠅓󠅕󠄐󠅣󠅑󠅤󠅙󠅣󠅖󠅙󠅕󠅔󠄐󠅒󠅩󠄐󠄷󠅟󠅔󠄞󠄐󠄾󠅟󠅧󠄐󠅧󠅕󠄐󠅓󠅑󠅞󠄐󠅙󠅝󠅠󠅜󠅕󠅝󠅕󠅞󠅤󠄐󠅤󠅘󠅕󠄐󠅣󠅑󠅝󠅕󠄐󠅖󠅥󠅞󠅓󠅤󠅙󠅟󠅞󠅑󠅜󠅙󠅤󠅩󠄐󠅧󠅙󠅤󠅘󠄐󠅔󠅑󠅤󠅑󠄝󠅝󠅙󠅞󠅙󠅞󠅗󠄐󠅑󠅜󠅗󠅟󠅢󠅙󠅤󠅘󠅝󠅣󠄞ystem