Dos clients VPN poden sortir per dues adreces IPv4 públiques diferents, i la regla que ho fa és més curta del que la majoria de la gent espera. El que la fa funcionar no és la sintaxi d’iptables, sinó l’estat del paquet quan arriba a la cadena de sortida: l’adreça d’origen que hi ha allà encara ha de distingir els clients. Si un emmascarament anterior ja ha ajuntat tots dos en una sola adreça, cap regla per client no pot recuperar la distinció. Resoleu primer aquesta qüestió i després escriviu la traducció.

Quina identitat sobreviu fins a la passarel·la

La regla coincideix amb l’adreça d’origen del paquet, no amb un nom d’usuari VPN ni amb el nom que mostra una aplicació client. Tot el que tradueix el paquet abans en el camí determina què pot veure encara la vostra regla. Executeu la taula nat en ordre i trobeu el punt on l’origen encara és per client.

iptables -t nat -S POSTROUTING

Llegiu aquest llistat des de dalt. Una regla de masquerade a prop de la part superior reescriu l’origen per a cada flux coincident, i les entrades per client col·locades després coincideixen amb una adreça que ja no existeix. Quan dos dispositius LAN comparteixen un túnel i arriben com una sola adreça interna, el disseny ha de canviar abans que el tallafoc: manteniu els seus rangs d’origen separats o doneu a cadascun la seva pròpia adreça interna.

Vinculeu l’assignació de l’adreça interna al client autenticat. Lliurar aquesta adreça a un altre dispositiu lliura també la política de sortida, i la traducció d’origen no és una prova d’identitat per si sola.

La traducció no pot inventar una adreça

Cada adreça pública s’ha d’assignar o encaminar a aquest punt de sortida, i les respostes han de trobar el camí de tornada. Una regla que envia trànsit des d’una adreça a la qual ningú no encamina de tornada es descarta a l’extrem llunyà o es respon a un amfitrió que mai no la va demanar. Una instància de proveïdor al núvol normalment té la seva adreça pública traduïda a una adreça d’interfície privada abans que el paquet surti, així que l’origen SNAT ha de ser l’adreça que el proveïdor acceptarà, no el valor que mostra la consola. Llegiu el model d’adreces del proveïdor i seguiu-lo en lloc de copiar el valor públic a cada paquet.

A la pràctica, això vol dir comprovar el prefix encaminat a la consola del proveïdor abans de tocar el tallafoc, i utilitzar l’adreça d’interfície privada com a origen de la traducció quan la correspondència és un a un. Les adreces que s’utilitzen als exemples següents provenen dels rangs de documentació, així que el primer que cal substituir és el text de l’adreça mateix.

Inseriu abans del masquerade genèric

Confirmeu la interfície de sortida i la cadena actual abans d’afegir res. La primera decideix quins paquets pot coincidir la regla, i la segona mostra què hi ha ja davant seu.

ip -4 route show default
iptables -t nat -L POSTROUTING -n -v --line-numbers

La primera ordre anomena la interfície per la qual surt realment un paquet cap a internet. La segona imprimeix la cadena amb números de línia. L’entrada de masquerade genèrica és la línia per sobre de la qual cal quedar-se.

iptables -t nat -I POSTROUTING 1 -s 10.88.4.20/32 -o ens3 -j SNAT --to-source 198.51.100.77
iptables -t nat -I POSTROUTING 1 -s 10.88.4.21/32 -o ens3 -j SNAT --to-source 198.51.100.78

Les dues regles anteriors coincideixen amb una adreça interna cadascuna, limiten la coincidència a la interfície de sortida i defineixen l’origen explícitament. Inseriu en lloc d’afegir: a la posició 1 s’avaluen abans de la línia de masquerade. L’ordre entre les dues no importa perquè els seus orígens són diferents. Substituïu ens3 pel que hagi informat l’ordre de ruta, i manteniu altres gestors de tallafoc lluny dels mateixos ganxos, ja que dues eines que escriuen una taula és la raó habitual per la qual una regla correcta no té efecte.

Demostreu l’origen amb un flux nou

El NAT amb estat lliga una traducció quan comença un flux i la reutilitza per a paquets posteriors, així que una sessió oberta abans del canvi conserva el seu origen antic després del canvi. Només una connexió iniciada de nou demostra la regla.

conntrack -L -s 10.88.4.20 -p tcp --dport 443

Llegiu la direcció de resposta d’aquesta entrada: la seva destinació és l’adreça que l’extrem remot veu com a origen. Compareu-la amb l’adreça pública que preteníeu, i tracteu una entrada que porti l’adreça antiga com a prova d’un flux que va començar massa d’hora, no d’una regla trencada. Demaneu al client que obri una connexió nova i després repetiu la consulta. Buidar tota la taula de seguiment per forçar la prova interromp totes les altres sessions de la passarel·la.

La traducció encara no tria la ruta, no admet el flux pel filtre ni publica un servei d’entrada. Una ruta equivocada i una regla de permís absent continuen fallant després d’una regla SNAT perfecta. Comproveu també IPv6 i qualsevol camí de sortida secundari, i després anoteu les parelles intern-a-públic a la documentació del tallafoc perquè el proper canvi comenci per la correspondència i no pel text de la regla.

Articles relacionats