pfSense: Routed Subnet via ExtraIP.com

taylor-vick-M5tzZtFCOfs-unsplash

Via ExtraIP.com kun je extra publieke IP-adressen aanvragen op een bestaande internet verbinding.

Routed subnet van ExtraIP configureren onder pfSense

Introductie ExtraIP

Een routed subnet is handig wanneer je meerdere publieke IP-adressen nodig hebt. Bijvoorbeeld voor een eigen mailserver of om bepaald verkeer via een ander IP-adres het internet op te laten gaan. Denk in het laatste geval bijvoorbeeld aan een gastennetwerk.

Techniek

Een routed subnet van ExtraIP wordt geleverd via een tunnel. Er wordt een generieke tunnel aangeboden in de vorm van Generic Routing Encapsulation (GRE). GRE biedt een manier om willekeurige pakketten van het ene tunneleindpunt naar het andere te verzenden. pfSense ondersteund onder andere GRE. Zodra je een GRE op hebt gezet, dan kun je deze uitdrukken in een interface. Op deze interface kun je vervolgens door middel van NAT regels het inkomende en uitgaande verkeer regelen. In Port Forward regels onder NAT kun je inkomend verkeer accepteren. In Outbound regels onder NAT kun je bepalen hoe het verkeer eruit gaat. Dit laatste is belangrijk, omdat verkeer anders via de standaard routering (default gateway) het internet op lekt.

Aanvragen

ExtraIP Site Een routed subnet kan eenvoudig aangevraagd worden. Het is aan te bevelen om eerst een testtunnel aan te vragen. Zo'n testtunnel is een vast/verplicht onderdeel van de aanvraag. Je kunt daarmee 30 dagen een routed subnet testen. Ik heb meerdere routed subnets opgezet via ExtraIP en ik kon de testtunnel overslaan door aan te geven dat ik reeds een test tunnel op had gezet. Voor de zekerheid heb ik dat de laatste keer vermeld bij de aanvraag. Sla je de testtunnel over en wil je de aanvraag ongedaan maken? Dan snijd je jezelf in de vingers. Je betaald per jaar vooruit. Het advies is om dus eerst een testtunnel op te zetten en te bekijken of deze goed voor jou werkt. Je kunt je inschrijven en een (test)tunnel aanvragen via extraip.com.

Configureren

De configuratie kan opgeknipt worden in een aantal delen. Het eerste wat uitgevoerd moet worden is het configureren van de GRE tunnel. In dit artikel wordt uitgelegd hoe je een GRE-tunnel configureert en wat er verder nodig is. Dit artikel wordt afgesloten met een aantal tips en trucs.

GRE tunnel configureren

Instellingen ExtraIP In de omgeving van ExtraIP kun je je IP-adres van je internetverbinding invullen. Dat doe je onder Tunnels. Klik vervolgens op de interface naam (bijvoorbeeld 'tun1234' - dit staat onder "tunnel" in het overzicht). Vul bij Remote address onder Endpoint gegevens het IPv4-adres is van jou internetverbinding in.

Tip: mocht jou IP-adres van jou internetverbinding regelmatig veranderen, maak dan gebruik van de beschikbare API. Hiermee kun je bijvoorbeeld d.m.v. een cronjob (geplande taak) het IP-adres van je internetverbinding doorgeven. Het beste is om d.m.v. een script in de gaten te houden of het IP-adres van jou internetverbinding veranderd is; vervolgens doe je de benodigde API call naar ExtraIP zodat de tunnel weer tot stand komt.

Configuratie pfSense

GRE-tunnel
Onder de Endpoint gegevens van jou ExtraIP account vind je het Router IPv4-address. Dat adres heb je nodig voor de GRE-tunnel.

pfSense: GRE
Klik in de WebUI van pfSense op [Assignments] onder [Interfaces]. Klik vervolgens op [GRE]. Met de knop [+ Add] voeg je de GRE toe.

Bij Parent Interface selecteer je (meestal) de WAN interface. In mijn geval heet deze interface IPV4WAN1. Vul vervolgens het Router IPv4-address in achter Remote Address. Bij Local IPv4 tunnel address en Remote IPv4 address kun je het eerste beschikbare IPv4 IP invullen. Dat is het tweede IP van het subnet. Het eerste IP is namelijk het netwerk adres. Het netwerk adres kun je niet gebruiken. Geef vervolgens in CIDR formaat aan om wat voor subnet het gaat. In mijn geval gaat het om een /29 netwerk. Een /29 netwerk is een 255.255.255.248 subnet met 8 IP adressen waarvan er 6 bruikbaar zijn (formeel eigenlijk 5 wanneer je één IP adres exclusief gebruikt voor je router). Vink de optie Add Static Route aan en vul bij Description een handige omschrijving in (bijvoorbeeld: "ExtraIP"). Klik tot slot op de knop [Save].

pfSense-GRE

Hiermee is de tunnel aangemaakt. De volgende stap is om de tunnel uit te drukken in een interface.

pfSense: GRE uitdrukken in interface
Klik op [Assignments] onder [Interfaces]. Onderaan de lijst selecteer je achter Available network ports voor de GRE-tunnel. Klik vervolgens op de knop [+ Add] om de interface toe te voegen. De interface wordt in het lijstje weergegeven als een OPT-interface. Bijvoorbeeld OPT1 of OPT2 (et cetera). Klik op de interfacenaam om de interface te configureren. Pas de beschrijving achter Description aan naar iets logisch. In mijn geval heb ik de beschrijving aangepast naar IPV4WAN2. De MTU kan ingesteld worden op 1500. Ik heb de MSS echter op 1476 ingesteld. De vinkjes voor private networks (etc) en bogon's heb ik aangevinkt. Klik tot slot op de knop [+ Save].

pfSense-GRE-uitgedrukt-in-interface

Hiermee is de interface aangemaakt. Op deze interface kunnen firewall-regels toegepast worden.

Firewall-regels
Zowel voor inkomend (Port Forwards) en uitgaand verkeer (Outbound NAT) zijn regels nodig. Deze regels maak je aan via de optie NAT onder Firewall.

Inkomend verkeer
Voor inkomend verkeer is het belangrijk om het volgende op te geven:

  • Interface
  • Address Family
  • Protocol
  • Destination
  • Destination port range
  • Redirect target IP
  • Redirect target port

Voor een webserver op poort 80 zou je dan het volgende selecteren/invullen door op [Add] te klikken bij [Port Forward] (wat zit onder onderdeel [NAT] onder menu-item [Firewall]):

  • Interface: IPV4WAN2 (de naam van de interface waarin de GRE is uitgedrukt)
  • Address Family: IPv4
  • Protocol: TCP
  • Destination: Single host or alias + {het IPv4 adres waar je het verkeer op verwacht}
  • Destination port range: 80
  • Redirect target IP: {het IPv4-adres waar de webserver op draait - bijvoorbeeld 172.16.16.2}
  • Redirect target port: 80

Klik op de knop [Save] om de NAT-regel op te slaan.

pfSense-inbound-traffic

Hiermee zal inkomend verkeer via het IP-adres doorgezet worden naar de webserver.

Wanneer je echter een traceroute uitvoert vanaf de desbetreffende server, dan zul je merken dat het verkeer niet via de GRE-tunnel het internet op gaat. De volgende stap is om dat te regelen d.m.v. een outbound NAT regel.

Uitgaand verkeer
Eerst moet de Outbound NAT Mode aangepast worden (indien deze nog niet op Hybrid Outbound NAT staat). Klik op [Outbound] bij [NAT] onder [Firewall]. Vink achter Mode de optie Hybrid Outbound NAT rule generation aan. Klik vervolgens op de knop [Save].

Vervolgens kan de desbetreffende regel aangemaakt worden.

Voor uitgaand verkeer is het belangrijk om het volgende op te geven:
Advanced Outbound NAT Entry:

  • Interface
  • Address Family: IPv4
  • Protocol
  • Source
  • Destination

Translation:

  • Address: Other Subnet (Enter Below)
  • Other subnet: {IPv4-adres waar het verkeer via naar buiten moet} + selecteer { /32 }
  • Description: vul een logische beschrijving in

In het geval van het eerdere voorbeeld met de webserver kan het volgende ingevuld worden:
Advanced Outbound NAT Entry:

  • Interface: IPV4WAN2 (de naam van de interface waarin de GRE is uitgedrukt)
  • Address Family: IPv4
  • Protocol: any
  • Source: Network + {172.16.16.2 } + { /32 }
  • Destination: Any

Translation:

  • Address: Other Subnet (Enter Below)
  • Other subnet: {IPv4-adres waar het verkeer via naar buiten moet} + selecteer { /32 }
  • Description: vul een logische beschrijving in

pfSense-outbound-traffic

Hiermee gaat al het IPv4 verkeer via het opgegeven publieke IPv4-adres het internet op.

Tips en trucs

pfSense: volgorde NAT-/firewall regels

De volgorde van NAT-/firewall-regels is belangrijk. De regels worden van boven naar beneden geëvalueerd! Schuif de regels naar de gewenste positie onder:

  • Firewall - NAT - Outbound
  • Firewall - NAT - Port Forward
  • Firewall - Rules

Denk bij het "zoeken" naar de regels om de interface waar deze onder zijn aangemaakt. Standaard zullen de regels van de WAN interface getoond worden (zie: [Rules] onder [Firewall]).

pfSense: labels (seperators)

pfSense kent de optie Seperator. Hiermee kun je een label aanmaken met een kleur en een tekst. Zo'n label kun je op de gewenste positie plaatsen (schuiven) boven/tussen/onder firewall regels. Dat is handig om regels te groeperen of extra op te laten vallen.

pfSense: aliases (objecten)

pfSense kent de optie Aliasses onder Firewall. Dit is een manier om IP-adressen, poorten en URL's te groeperen. Hiermee kun je objecten aanmaken die je in de NAT-/firewall regels kunt gebruiken.

In het voorbeeld van de webserver kan het natuurlijk voorkomen dat je poort 80 (http) en poort 443 (https) open wilt zetten. Een port alias is dan handig. Je zou de alias bijvoorbeeld webserver_tcp_ports kunnen noemen en de desbetreffende poorten in kunnen vullen. In een NAT-/firewall regel kies je achter de port range dan other en vul je de alias in.

Uiteraard zijn IP aliassen ook handig. In plaats van IP adressen zie je dan namen staan. Dat kan overzichtelijker werken en ook erg handig zijn wanneer een server van IP wijzigt.

pfSense-inbound-NAT-voorbeeld-met-aliasses

pfSense: compleet subnet routeren

Het is mogelijk om een compleet subnet te routeren via één van de publieke IP adressen. Zelf doe ik dat met mijn gastennetwerk (gasten Wi-Fi) en mijn test netwerk. Mocht er eens een besmette laptop of mobiel tussen zitten, dan wordt mijn internetverbinding niet zomaar in quarantaine gezet maar zal er mogelijk een klacht ingediend worden bij ExtraIP. In alle gevallen is een klacht niet prettig. Mijn advies is om toe te zien of de internetverbinding en het routed subnet op een fatsoenlijke manier gebruikt wordt. Configureren van de routering werkt 't zelfde als bij uitgaand verkeer voor één IP. Bij een netwerk zoals 192.168.254.0 /24 vul je exact dat in bij source. Bij een enkele server zou dat bijvoorbeeld 192.168.254.101 /32 zijn.

pfSense-Outbound-Compleet-Subnet

pfSense: GRE en virtual IP's i.c.m. 1:1 NAT et cetera

In oudere versies van pfSense kon je o.a. virtual IP's op een GRE toepassen. Dat is in de laatste versies van pfSense niet langer mogelijk omdat deze functionaliteit op virtuele interfaces uit pfSense is verwijderd. Dat is op zich jammer maar ook eigenlijk wel logisch. Mocht je dat proberen, dan krijg je de volgende foutmelding: The interface chosen for the VIP has no IPv4 or IPv6 address configured so it cannot be used as a parent for the VIP.

Testen outbound NAT en port forwards

Outbound NAT kan getest worden door bijvoorbeeld een curl commando en een traceroute uit te voeren vanaf de desbetreffende server:

  • $ curl https://api.extraip.com/ip/
  • $ traceroute 1.1.1.1

Via het eerste commando (curl) krijg je het IP-adres terug waarvan ExtraIP het verkeer vandaan ziet komen. Via het tweede commando (traceroute) kun je de hops zien die gepasseerd worden totdat 1.1.1.1 bereikt is.

Vanaf een Windows machine kun je Invoke-WebRequest onder PowerShell gebruiken als alternatief voor curl. Bijvoorbeeld Invoke-WebRequest -Uri https://www.google.com. In plaats van het traceroute commado kun je vanaf een Windows machine het tracert commando gebruiken. Bijvoorbeeld tracert 1.1.1.1. Dit werkt onder PowerShell en CMD.

Inbound NAT kan getest worden via een Port Forwarding Tester zoals van yougetsignal.com. Je vult dan bij Remote Address het publieke IP-adres - of de FQDN - in van jou server.

Port-test

Volgende Post Vorige Post