iipou: níos mó ná tollán gan chriptiú

Cad atá á rá againn le Dia IPv6?

iipou: níos mó ná tollán gan chriptiú
Sin ceart, déarfaimid an rud céanna le dia an criptithe inniu.

Anseo beimid ag caint faoi thollán IPv4 neamhchriptithe, ach ní faoi cheann "lampa te", ach faoi cheann nua-aimseartha "LED". Agus tá soicéid amh ag splancadh anseo freisin, agus tá obair ar siúl le paicéid sa spás úsáideora.

Tá N prótacail tollánaithe ann do gach blas agus dath:

  • stylish, faiseanta, óige WireGuard
  • ilfheidhmeach, cosúil le sceana na hEilvéise, OpenVPN agus SSH
  • sean agus ní olc GRE
  • an IPIP is simplí, tapa, go hiomlán neamhchriptithe
  • ag forbairt go gníomhach GINEACHA
  • go leor eile.

Ach is ríomhchláraitheoir mé, mar sin méadóidh mé N ach codán, agus fágtar forbairt prótacail fíor d'fhorbróirí Kommersant.

I gceann gan bhreith an dréachtIs é an rud atá á dhéanamh agam anois ná teacht ar óstach taobh thiar de NAT ón taobh amuigh. Ag baint úsáide as prótacail le cripteagrafaíocht do dhaoine fásta le haghaidh seo, ní raibh mé in ann an mothú go raibh sé cosúil le gealbhain a lámhach as gunna a chroitheadh. Mar ní úsáidtear an tollán don chuid is mó ach amháin chun poill a mhúscailt i NAT-e, is gnách go mbíonn trácht inmheánach criptithe freisin, ach báthann siad fós i HTTPS.

Agus mé ag déanamh taighde ar phrótacail tollánaithe éagsúla, díríodh aird m'fhoirfeisteoir istigh ar IPIP arís agus arís eile mar gheall ar a laghad forchostais. Ach tá míbhuntáistí suntasacha go leith ag baint leis do mo thascanna:

  • éilíonn sé IPanna poiblí ar an dá thaobh,
  • agus gan fíordheimhniú ar do shon.

Dá bhrí sin, bhí an foirfeach tiomáinte ar ais isteach sa chúinne dorcha an cloigeann, nó cibé áit ina suí sé.

Agus ansin lá amháin, agus ailt á léamh ar tolláin a dtacaítear leo ó dhúchas i Linux tháinig mé trasna ar FOU (Foo-over-UDP), i.e. cibé, fillte i UDP. Go dtí seo, ní thacaítear ach le IPIP agus GUE (Iamhchur Cineálach UDP).

“Seo an piléar airgid! Is leor IPIP simplí dom.” - Cheap mé.

Go deimhin, iompaigh amach nach raibh an piléar go hiomlán airgid. Réitíonn encapsulation i UDP an chéad fhadhb - is féidir leat ceangal le cliaint taobh thiar de NAT ón taobh amuigh ag baint úsáide as nasc réamhbhunaithe, ach anseo leath de na míbhuntáiste eile blossoms IPIP i bhfianaise nua - is féidir le duine ar bith ó líonra príobháideach i bhfolach taobh thiar de na infheicthe. IP poiblí agus calafort cliant (i IPIP íon níl an fhadhb seo ann).

Chun an fhadhb seo a réiteach go leith, rugadh an fóntais eipid. Cuireann sé meicníocht tí i bhfeidhm chun óstach iargúlta a fhíordheimhniú, gan cur isteach ar oibriú an FOU eithne, rud a phróiseálfaidh paicéid go tapa agus go héifeachtach sa spás eithne.

Níl do script ag teastáil uainn!

Ceart go leor, má tá eolas agat ar chalafort poiblí agus IP an chliaint (mar shampla, ní théann gach duine taobh thiar de áit ar bith, déanann NAT iarracht calafoirt 1-in-1 a mhapáil), is féidir leat tollán IPIP-over-FOU a chruthú leis an orduithe seo a leanas, gan aon scripteanna.

ar an bhfreastalaí:

# Подгрузить модуль ядра FOU
modprobe fou

# Создать IPIP туннель с инкапсуляцией в FOU.
# Модуль ipip подгрузится автоматически.
ip link add name ipipou0 type ipip 
    remote 198.51.100.2 local 203.0.113.1 
    encap fou encap-sport 10000 encap-dport 20001 
    mode ipip dev eth0

# Добавить порт на котором будет слушать FOU для этого туннеля
ip fou add port 10000 ipproto 4 local 203.0.113.1 dev eth0

# Назначить IP адрес туннелю
ip address add 172.28.0.0 peer 172.28.0.1 dev ipipou0

# Поднять туннель
ip link set ipipou0 up

ar an gcliant:

modprobe fou

ip link add name ipipou1 type ipip 
    remote 203.0.113.1 local 192.168.0.2 
    encap fou encap-sport 10001 encap-dport 10000 encap-csum 
    mode ipip dev eth0

# Опции local, peer, peer_port, dev могут не поддерживаться старыми ядрами, можно их опустить.
# peer и peer_port используются для создания соединения сразу при создании FOU-listener-а.
ip fou add port 10001 ipproto 4 local 192.168.0.2 peer 203.0.113.1 peer_port 10000 dev eth0

ip address add 172.28.0.1 peer 172.28.0.0 dev ipipou1

ip link set ipipou1 up

i gcás

  • ipipou* — ainm an chomhéadain líonra áitiúil tollán
  • 203.0.113.1 - freastalaí IP poiblí
  • 198.51.100.2 — IP poiblí an chliaint
  • 192.168.0.2 — IP an chliaint sannta don chomhéadan eth0
  • 10001 — calafort cliant áitiúil le haghaidh FOU
  • 20001 — calafort cliant poiblí le haghaidh FOU
  • 10000 — calafort freastalaí poiblí le haghaidh FOU
  • encap-csum — rogha seiceálacha UDP a chur le paicéid UDP atá cuimsithe; is féidir a chur in ionad noencap-csum, gan trácht, tá sláine á rialú cheana féin ag an gciseal imchochlaithe seachtrach (cé go bhfuil an paicéad taobh istigh den tollán)
  • eth0 — comhéadan áitiúil a mbeidh an tollán ipip ceangailte leis
  • 172.28.0.1 — IP comhéadan tollán an chliaint (príobháideach)
  • 172.28.0.0 — comhéadan freastalaí tolláin IP (príobháideach)

Chomh fada is atá an nasc UDP beo, beidh an tollán in ord oibre, ach má bhriseann sé, beidh tú t-ádh - má tá IP an chliaint: port fós mar an gcéanna - beidh sé beo, má athraíonn siad - beidh sé briseadh.

Is é an bealach is éasca chun gach rud a iompú ar ais ná na modúil eithne a dhíluchtú: modprobe -r fou ipip

Fiú mura bhfuil fíordheimhniú ag teastáil, ní i gcónaí a bhíonn IP poiblí agus calafort an chliaint ar eolas agus is minic a bhíonn siad dothuartha nó inathraithe (ag brath ar an gcineál NAT). Má fhágann tú ar lár encap-dport ar thaobh an fhreastalaí, ní oibreoidh an tollán, níl sé cliste go leor chun an calafort nasc iargúlta a ghlacadh. Sa chás seo, is féidir le iipou cabhrú freisin, nó is féidir WireGuard agus daoine eile cosúil leis cabhrú leat.

Conas a oibríonn sé?

Osclaíonn an cliant (a bhíonn taobh thiar de NAT de ghnáth) tollán (mar atá sa sampla thuas), agus cuireann sé paicéad fíordheimhnithe chuig an bhfreastalaí ionas go ndéanfaidh sé an tollán a chumrú ar a thaobh. Ag brath ar na socruithe, is féidir é seo a bheith ina phaicéad folamh (díreach ionas gur féidir leis an bhfreastalaí an IP poiblí: port ceangail a fheiceáil), nó le sonraí trína bhféadfaidh an freastalaí an cliant a shainaithint. Is féidir leis na sonraí a bheith ina bprásfhrása simplí i dtéacs soiléir (tagann an analaí le HTTP Basic Auth chun cuimhne) nó sonraí saindeartha sínithe le heochair phríobháideach (cosúil le HTTP Digest Auth amháin níos láidre, féach an fheidhm client_auth sa chód).

Ar an bhfreastalaí (an taobh leis an IP poiblí), nuair a thosaíonn iipou, cruthaíonn sé láimhseálaí scuaine nfqueue agus cumraíonn sé netfilter ionas go seolfar na paicéid riachtanacha áit ar cheart dóibh a bheith: paicéid a thosaíonn an nasc leis an scuaine nfqueue, agus [beagnach] téann an chuid eile go léir díreach chuig an éisteoir FOU.

Dóibh siúd nach bhfuil a fhios acu, is rud speisialta é nfqueue (nó NetfilterQueue) d'amaitéaraigh nach bhfuil a fhios acu conas modúil eithne a fhorbairt, rud a ligeann duit paicéid líonra a atreorú chuig spás úsáideora agus iad a phróiseáil trí úsáid a bhaint as netfilter (nftables/iptables). ciallaíonn primitive ar láimh: modhnaigh (roghnach ) agus tabhair ar ais go dtí an eithne é, nó caith amach é.

I gcás roinnt teangacha ríomhchlárúcháin tá ceangail le bheith ag obair le nfqueue, le haghaidh bash ní raibh aon cheann (heh, ní nach ionadh), bhí orm python a úsáid: úsáidí iipou NetfilterQueue.

Mura bhfuil feidhmíocht ríthábhachtach, ag baint úsáide as an rud seo is féidir leat do loighic féin a réiteach go réasúnta tapa agus go héasca maidir le bheith ag obair le paicéid ar leibhéal measartha íseal, mar shampla, prótacail aistrithe sonraí turgnamhacha a chruthú, nó trí sheirbhísí áitiúla agus iargúlta a tholladh le hiompar neamhchaighdeánach.

Oibríonn soicéid amh lámh ar láimh le nfqueue, mar shampla, nuair a bhíonn an tollán cumraithe cheana féin agus FOU ag éisteacht leis an gcalafort atá ag teastáil, ní bheidh tú in ann paicéad a sheoladh ón gcalafort céanna ar an ngnáthbhealach - tá sé gnóthach, ach is féidir leat paicéad a ghintear go randamach a ghlacadh agus a sheoladh go díreach chuig an gcomhéadan líonra ag baint úsáide as soicéad amh, cé go mbeidh gá le beagán níos mó tinkering chun paicéad den sórt sin a ghiniúint. Seo mar a chruthaítear paicéid le fíordheimhniú in iipou.

Ós rud é nach bpróiseálann iipou ach na chéad phaicéid ón nasc (agus iad siúd a d'éirigh le sceitheadh ​​​​sa scuaine sular bunaíodh an nasc), ní bhíonn an fheidhmíocht beagnach ag fulaingt.

Chomh luath agus a fhaigheann an freastalaí iipou paicéad fíordheimhnithe, cruthaítear tollán agus tá gach paicéad ina dhiaidh sin sa nasc próiseáilte cheana féin ag an eithne ag seachaint nfqueue. Má theipeann ar an nasc, ansin seolfar an chéad phaicéad den chéad cheann eile chuig an scuaine nfqueue, ag brath ar na socruithe, más rud é nach paicéad é le fíordheimhniú, ach ón IP deireanach a chuimhnítear agus port an chliaint, is féidir é a rith ar nó a chaitheamh i leataobh. Má thagann paicéad fíordheimhnithe ó IP agus calafort nua, déantar an tollán a athchumrú chun iad a úsáid.

Tá fadhb amháin eile ag an ngnáth IPIP-over-FOU agus iad ag obair le NAT - ní féidir dhá thollán IPIP a chruthú atá cuimsithe sa UDP leis an IP céanna, toisc go bhfuil na modúil FOU agus IPIP scoite amach óna chéile. Is é sin ní bheidh péire cliant taobh thiar den IP poiblí céanna in ann nascadh go comhuaineach leis an bhfreastalaí céanna ar an mbealach seo. Amach anseo, b'fhéidir, déanfar é a réiteach ar leibhéal an eithne, ach níl sé seo cinnte. Idir an dá linn, is féidir le NAT fadhbanna NAT a réiteach - má tharlaíonn sé go bhfuil péire seoltaí IP á n-áitiú ag tollán eile cheana féin, déanfaidh iipou NAT ó poiblí go IP príobháideach eile, voila! - is féidir leat tolláin a chruthú go ritheann na calafoirt amach.

Mar Níl gach paicéad sa nasc sínithe, ansin tá an chosaint shimplí seo leochaileach do MITM, mar sin má tá villain lurking ar an gcosán idir an cliant agus an freastalaí ar féidir leo éisteacht leis an trácht agus é a ionramháil, is féidir leis a atreorú paicéid fíordheimhnithe trí seoladh eile agus cruthaigh tollán ó óstach neamhiontaofa .

Má tá smaointe ag éinne conas é seo a shocrú agus an chuid is mó den trácht sa chroílár á fhágáil agat, ná bíodh leisce ort labhairt.

Dála an scéil, tá cruthaithe go han-mhaith ag imchochlú sa UDP. I gcomparáid le hinchochlú thar IP, tá sé i bhfad níos cobhsaí agus go minic níos tapúla in ainneoin forchostais bhreise an cheanntásc UDP. Tá sé seo mar gheall ar an bhfíric go n-oibríonn an chuid is mó de na hóstach ar an Idirlíon go maith ach amháin leis na trí phrótacal is coitianta: TCP, UDP, ICMP. Is féidir leis an gcuid inláimhsithe gach rud eile a scriosadh go hiomlán, nó é a phróiseáil níos moille, toisc go bhfuil sé optamaithe ach amháin do na trí cinn seo.

Mar shampla, is é seo an fáth gur cruthaíodh QUICK, ar a bhfuil HTTP/3 bunaithe, ar bharr an UDP, agus ní ar bharr an IP.

Bhuel, a dhóthain focal, tá sé in am a fheiceáil conas a oibríonn sé sa “domhan fíor”.

Cath

A úsáidtear chun aithris a dhéanamh ar an saol fíor iperf3. Maidir le cé chomh gar agus atá sé don réaltacht, tá sé seo beagnach mar an gcéanna le haithris a dhéanamh ar an saol fíor i Minecraft, ach déanfaidh sé faoi láthair.

Rannpháirtithe sa chomórtas:

  • príomhchainéal tagartha
  • Is é iipou laoch an ailt seo
  • OpenVPN le fíordheimhniú ach gan aon chriptiú
  • OpenVPN i mód uile-chuimsitheach
  • WireGuard gan PresharedKey, le MTU=1440 (ó IPv4-amháin)

Sonraí teicniúla le haghaidh geeks
Glactar méadracht leis na horduithe seo a leanas:

ar an gcliant:

UDP

CPULOG=NAME.udp.cpu.log; sar 10 6 >"$CPULOG" & iperf3 -c SERVER_IP -4 -t 60 -f m -i 10 -B LOCAL_IP -P 2 -u -b 12M; tail -1 "$CPULOG"
# Где "-b 12M" это пропускная способность основного канала, делённая на число потоков "-P", чтобы лишние пакеты не плодить и не портить производительность.

TCP

CPULOG=NAME.tcp.cpu.log; sar 10 6 >"$CPULOG" & iperf3 -c SERVER_IP -4 -t 60 -f m -i 10 -B LOCAL_IP -P 2; tail -1 "$CPULOG"

latency ICMP

ping -c 10 SERVER_IP | tail -1

ar an bhfreastalaí (ritheann sé go comhuaineach leis an gcliant):

UDP

CPULOG=NAME.udp.cpu.log; sar 10 6 >"$CPULOG" & iperf3 -s -i 10 -f m -1; tail -1 "$CPULOG"

TCP

CPULOG=NAME.tcp.cpu.log; sar 10 6 >"$CPULOG" & iperf3 -s -i 10 -f m -1; tail -1 "$CPULOG"

Cumraíocht tolláin

eipid
freastalaí
/etc/ipipou/server.conf:

server
number 0
fou-dev eth0
fou-local-port 10000
tunl-ip 172.28.0.0
auth-remote-pubkey-b64 eQYNhD/Xwl6Zaq+z3QXDzNI77x8CEKqY1n5kt9bKeEI=
auth-secret topsecret
auth-lifetime 3600
reply-on-auth-ok
verb 3

systemctl start ipipou@server

custaiméir
/etc/ipipou/client.conf:

client
number 0
fou-local @eth0
fou-remote SERVER_IP:10000
tunl-ip 172.28.0.1
# pubkey of auth-key-b64: eQYNhD/Xwl6Zaq+z3QXDzNI77x8CEKqY1n5kt9bKeEI=
auth-key-b64 RuBZkT23na2Q4QH1xfmZCfRgSgPt5s362UPAFbecTso=
auth-secret topsecret
keepalive 27
verb 3

systemctl start ipipou@client

openvpn (gan criptiú, le fíordheimhniú)
freastalaí

openvpn --genkey --secret ovpn.key  # Затем надо передать ovpn.key клиенту
openvpn --dev tun1 --local SERVER_IP --port 2000 --ifconfig 172.16.17.1 172.16.17.2 --cipher none --auth SHA1 --ncp-disable --secret ovpn.key

custaiméir

openvpn --dev tun1 --local LOCAL_IP --remote SERVER_IP --port 2000 --ifconfig 172.16.17.2 172.16.17.1 --cipher none --auth SHA1 --ncp-disable --secret ovpn.key

openvpn (le criptiú, fíordheimhniú, trí UDP, gach rud mar a bhíothas ag súil leis)
Cumraithe ag baint úsáide as openvpn-bainistigh

sreang-garda
freastalaí
/etc/wireguard/server.conf:

[Interface]
Address=172.31.192.1/18
ListenPort=51820
PrivateKey=aMAG31yjt85zsVC5hn5jMskuFdF8C/LFSRYnhRGSKUQ=
MTU=1440

[Peer]
PublicKey=LyhhEIjVQPVmr/sJNdSRqTjxibsfDZ15sDuhvAQ3hVM=
AllowedIPs=172.31.192.2/32

systemctl start wg-quick@server

custaiméir
/etc/wireguard/client.conf:

[Interface]
Address=172.31.192.2/18
PrivateKey=uCluH7q2Hip5lLRSsVHc38nGKUGpZIUwGO/7k+6Ye3I=
MTU=1440

[Peer]
PublicKey=DjJRmGvhl6DWuSf1fldxNRBvqa701c0Sc7OpRr4gPXk=
AllowedIPs=172.31.192.1/32
Endpoint=SERVER_IP:51820

systemctl start wg-quick@client

Torthaí

Comhartha gránna tais
Níl an t-ualach LAP freastalaí an-táscach, toisc... Tá go leor seirbhísí eile ar siúl ansin, uaireanta itheann siad acmhainní:

proto bandwidth[Mbps] CPU_idle_client[%] CPU_idle_server[%]
# 20 Mbps канал с микрокомпьютера (4 core) до VPS (1 core) через Атлантику
# pure
UDP 20.4      99.80 93.34
TCP 19.2      99.67 96.68
ICMP latency min/avg/max/mdev = 198.838/198.997/199.360/0.372 ms
# ipipou
UDP 19.8      98.45 99.47
TCP 18.8      99.56 96.75
ICMP latency min/avg/max/mdev = 199.562/208.919/220.222/7.905 ms
# openvpn0 (auth only, no encryption)
UDP 19.3      99.89 72.90
TCP 16.1      95.95 88.46
ICMP latency min/avg/max/mdev = 191.631/193.538/198.724/2.520 ms
# openvpn (full encryption, auth, etc)
UDP 19.6      99.75 72.35
TCP 17.0      94.47 87.99
ICMP latency min/avg/max/mdev = 202.168/202.377/202.900/0.451 ms
# wireguard
UDP 19.3      91.60 94.78
TCP 17.2      96.76 92.87
ICMP latency min/avg/max/mdev = 217.925/223.601/230.696/3.266 ms

## около-1Gbps канал между VPS Европы и США (1 core)
# pure
UDP 729      73.40 39.93
TCP 363      96.95 90.40
ICMP latency min/avg/max/mdev = 106.867/106.994/107.126/0.066 ms
# ipipou
UDP 714      63.10 23.53
TCP 431      95.65 64.56
ICMP latency min/avg/max/mdev = 107.444/107.523/107.648/0.058 ms
# openvpn0 (auth only, no encryption)
UDP 193      17.51  1.62
TCP  12      95.45 92.80
ICMP latency min/avg/max/mdev = 107.191/107.334/107.559/0.116 ms
# wireguard
UDP 629      22.26  2.62
TCP 198      77.40 55.98
ICMP latency min/avg/max/mdev = 107.616/107.788/108.038/0.128 ms

cainéal 20 Mbps

iipou: níos mó ná tollán gan chriptiú

iipou: níos mó ná tollán gan chriptiú

cainéal in aghaidh 1 Gbps dóchasach

iipou: níos mó ná tollán gan chriptiú

iipou: níos mó ná tollán gan chriptiú

I ngach cás, tá iipou gar go leor ó thaobh feidhmíochta leis an mbunchainéal, rud atá iontach!

D'iompair an tollán openvpn neamhchriptithe an-aisteach sa dá chás.

Má tá aon duine chun é a thástáil, beidh sé suimiúil aiseolas a chloisteáil.

Bealtaine IPv6 agus NetPrickle bheith linn!

Foinse: will.com

Add a comment