Aistriú ó OpenVPN go WireGuard chun líonraí a chomhdhlúthú in aon líonra L2 amháin

Aistriú ó OpenVPN go WireGuard chun líonraí a chomhdhlúthú in aon líonra L2 amháin

Ba mhaith liom mo thaithí ar líonraí a chomhcheangal i dtrí árasán atá iargúlta go geografach a roinnt, agus úsáideann gach ceann acu ródairí le OpenWRT mar gheata, i líonra coiteann amháin. Agus modh á roghnú chun líonraí a chomhcheangal idir L3 le ródú subnet agus L2 le droichead, nuair a bheidh na nóid líonra go léir san fho-líon céanna, tugadh tosaíocht don dara modh, atá níos deacra a chumrú, ach cuireann sé deiseanna níos mó ar fáil, ós rud é go bhfuil Beartaíodh úsáid thrédhearcach teicneolaíochtaí sa líonra atá á chruthú Wake-on-Lan agus DLNA.

Cuid 1: Cúlra

Roghnaíodh OpenVPN ar dtús mar phrótacal chun an tasc seo a chur i bhfeidhm, ós rud é, ar an gcéad dul síos, is féidir gléas sconna a chruthú a fhéadfar a chur leis an droichead gan fadhbanna, agus sa dara háit, tacaíonn OpenVPN le hoibriú thar an bprótacal TCP, rud a bhí tábhachtach freisin, toisc nach bhfuil aon fhadhb ann. Bhí seoladh IP tiomnaithe ag na hárasáin, agus ní raibh mé in ann STUN a úsáid, ós rud é go gcuireann mo sholáthraí bac ar naisc UDP ag teacht isteach óna líonraí ar chúis éigin, agus thug an prótacal TCP cead dom an calafort freastalaí VPN a chur ar aghaidh chuig VPS ar cíos ag baint úsáide as SSH. Sea, tugann an cur chuige seo ualach mór, ós rud é go bhfuil na sonraí criptithe faoi dhó, ach ní raibh mé ag iarraidh VPS a thabhairt isteach i mo líonra príobháideach, ós rud é go raibh an baol ann go bhféadfadh tríú páirtithe smacht a fháil air, mar sin, go mbeadh feiste den sórt sin acu. Bhí sé thar a bheith neamh-inmhianaithe ar mo líonra baile agus socraíodh íoc as slándáil le forchostas mór.

Chun an calafort a chur ar aghaidh ar an ródaire ar a raibh sé beartaithe an freastalaí a imscaradh, baineadh úsáid as an gclár sshtunnel. Ní dhéanfaidh mé cur síos ar intricacies a chumraíocht - déantar é go héasca, tabharfaidh mé faoi deara gurb é an tasc a bhí aige ná calafort TCP 1194 a chur ar aghaidh ón ródaire chuig an VPS. Ansin, bhí an freastalaí OpenVPN cumraithe ar an ngléas tap0, a bhí ceangailte leis an droichead br-lan. Tar éis an nasc leis an bhfreastalaí nuachruthaithe a sheiceáil ón ríomhaire glúine, ba léir go raibh údar leis an smaoineamh ar chur ar aghaidh calafoirt agus tháinig mo ríomhaire glúine chun bheith ina bhall de líonra an ródaire, cé nach raibh sé ann go fisiciúil.

Ní raibh ach rud beag amháin fágtha le déanamh: bhí sé riachtanach seoltaí IP a dháileadh in árasáin éagsúla ionas nach mbeadh siad ag teacht salach ar a chéile agus na ródairí a chumrú mar chliaint OpenVPN.
Roghnaíodh na seoltaí IP ródaire seo a leanas agus raonta freastalaí DHCP:

  • 192.168.10.1 le raon 192.168.10.2 - 192.168.10.80 don fhreastalaí
  • 192.168.10.100 le raon 192.168.10.101 - 192.168.10.149 don ródaire in árasán Uimh. 2
  • 192.168.10.150 le raon 192.168.10.151 - 192.168.10.199 don ródaire in árasán Uimh. 3

Bhí sé riachtanach freisin na seoltaí seo go díreach a shannadh do ródairí cliant an fhreastalaí OpenVPN tríd an líne a chur lena chumraíocht:

ifconfig-pool-persist /etc/openvpn/ipp.txt 0

agus na línte seo a leanas a chur leis an gcomhad /etc/openvpn/ipp.txt:

flat1_id 192.168.10.100
flat2_id 192.168.10.150

áit arb iad flat1_id agus flat2_id na hainmneacha gléis atá sonraithe agus deimhnithe á gcruthú chun nascadh le OpenVPN

Ansin, rinneadh cliaint OpenVPN a chumrú ar na ródairí, cuireadh gléasanna tap0 ar an dá cheann leis an droichead br-lan. Ag an gcéim seo, bhí an chuma ar gach rud go breá mar go bhféadfadh na trí líonra a chéile a fheiceáil agus oibriú mar aon ní amháin. Mar sin féin, tháinig mionsonraí nach raibh an-taitneamhach chun cinn: uaireanta d'fhéadfadh feistí seoladh IP a fháil nach bhfuil ón ródaire, agus na hiarmhairtí go léir ina dhiaidh sin. Ar chúis éigin, ní raibh am ag an ródaire i gceann de na hárasáin freagra a thabhairt ar DHCPDISCOVER in am agus fuair an gléas seoladh nach raibh sé beartaithe. Thuig mé gur gá dom iarratais den sórt sin a scagadh i tap0 ar gach ceann de na ródairí, ach mar a tharla, ní féidir le iptables oibriú leis an bhfeiste más cuid de dhroichead é agus caithfidh ebtables teacht i gcabhair orm. Is oth liom nach raibh sé i mo firmware agus bhí orm na híomhánna do gach feiste a atógáil. Trí seo a dhéanamh agus na línte seo a chur le /etc/rc.local de gach ródaire, réitíodh an fhadhb:

ebtables -A INPUT --in-interface tap0 --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -A INPUT --in-interface tap0 --protocol ipv4 --ip-protocol udp --ip-source-port 67:68 -j DROP
ebtables -A FORWARD --out-interface tap0 --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -A FORWARD --out-interface tap0 --protocol ipv4 --ip-protocol udp --ip-source-port 67:68 -j DROP

Mhair an chumraíocht seo ar feadh trí bliana.

Cuid 2: WireGuard a thabhairt isteach

Le déanaí, tá níos mó agus níos mó ag daoine ar an Idirlíon ag caint faoi WireGuard, ag meas simplíocht a chumraíochta, luas tarchurtha ard, ping íseal le slándáil inchomparáide. Nuair a chuardaíodh tuilleadh faisnéise faoi, ba léir nár thacaigh sé le bheith ag obair mar bhall droichid ná ag obair thar an bprótacal TCP, rud a thug orm smaoineamh nach raibh aon roghanna eile ann domsa go fóill seachas OpenVPN. Mar sin chuir mé deireadh le aithne a chur ar WireGuard.

Cúpla lá ó shin, scaipeadh nuacht ar fud acmhainní bealach amháin nó bealach eile a bhaineann le TF go gcuirfí WireGuard san áireamh sa eithne Linux ar deireadh, ag tosú le leagan 5.6. Mhol ailt nuachta, mar i gcónaí, WireGuard. Chuaigh mé isteach arís sa chuardach le haghaidh bealaí chun an t-sean OpenVPN a athsholáthar. An uair seo rith mé isteach airteagal seo. Labhair sé faoi chruthú tollán Ethernet thar L3 ag baint úsáide as GRE. Thug an t-alt seo dóchas dom. Ní raibh sé soiléir fós cad ba cheart a dhéanamh le prótacal an UDP. Thug an cuardach dom ailt faoi úsáid a bhaint as socat i gcomhar le tollán SSH chun calafort UDP a chur ar aghaidh, áfach, thug siad faoi deara nach n-oibríonn an cur chuige seo ach i mód nasc amháin, is é sin, go mbeadh obair roinnt cliant VPN dodhéanta. Tháinig mé suas leis an smaoineamh freastalaí VPN a shuiteáil ar VPS agus GRE a bhunú do chliaint, ach mar a d'éirigh sé amach, ní thacaíonn GRE le criptiú, rud a fhágann go bhfaighidh tríú páirtithe rochtain ar an bhfreastalaí. , beidh an trácht go léir idir mo líonraí ina lámha , rud nár oireann dom ar chor ar bith.

Arís eile, rinneadh an cinneadh i bhfabhar criptithe iomarcach, trí VPN a úsáid thar VPN ag baint úsáide as an scéim seo a leanas:

VPN Leibhéal 1:
VPS Is é freastalaí le seoladh inmheánach 192.168.30.1
MS Is é cliant VPS le seoladh inmheánach 192.168.30.2
MK2 Is é cliant VPS le seoladh inmheánach 192.168.30.3
MK3 Is é cliant VPS le seoladh inmheánach 192.168.30.4

VPN dara leibhéal:
MS Is é freastalaí le seoladh seachtrach 192.168.30.2 agus seoladh inmheánach 192.168.31.1
MK2 Is é cliant MS leis an seoladh 192.168.30.2 agus tá IP inmheánach 192.168.31.2 aige
MK3 Is é cliant MS leis an seoladh 192.168.30.2 agus tá IP inmheánach 192.168.31.3 aige

* MS — freastalaí ródaire in árasán 1, MK2 - ródaire in árasán 2, MK3 - ródaire in árasán 3
* Foilsítear cumraíochtaí gléis sa spoiler ag deireadh an ailt.

Agus mar sin, tá pings ag rith idir nóid líonra 192.168.31.0/24, tá sé in am bogadh ar aghaidh chuig tollán GRE a bhunú. Roimhe seo, ionas nach gcailltear rochtain ar ródairí, is fiú tolláin SSH a bhunú chun port 22 a chur ar aghaidh chuig an VPS, ionas go mbeidh, mar shampla, an ródaire ó árasán 10022 inrochtana ar phort 2 den VPS, agus an beidh ródaire ó árasán 11122 inrochtana ar phort 3 ródaire ó árasán XNUMX. Is fearr cur ar aghaidh a chumrú ag baint úsáide as an sshtunnel céanna, ós rud é go ndéanfaidh sé an tollán a athchóiriú má theipeann air.

Tá an tollán cumraithe, is féidir leat ceangal le SSH tríd an gcalafort ar aghaidh:

ssh root@МОЙ_VPS -p 10022

Ansin ba cheart duit OpenVPN a dhíchumasú:

/etc/init.d/openvpn stop

Anois socróimid tollán GRE ar an ródaire ó árasán 2:

ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.2
ip link set grelan0 up

Agus cuir an comhéadan cruthaithe leis an droichead:

brctl addif br-lan grelan0

Déanaimis nós imeachta comhchosúil ar ródaire an fhreastalaí:

ip link add grelan0 type gretap remote 192.168.31.2 local 192.168.31.1
ip link set grelan0 up

Agus cuir an comhéadan cruthaithe leis an droichead freisin:

brctl addif br-lan grelan0

ag tosú ón nóiméad seo, tosaíonn pings ag dul go rathúil go dtí an líonra nua agus mé, le sásamh, dul chun caife a ól. Ansin, chun meastóireacht a dhéanamh ar an gcaoi a bhfuil an líonra ag obair ar an taobh eile den líne, déanaim iarracht SSH isteach i gceann de na ríomhairí in árasán 2, ach reoiteann an cliant ssh gan leideanna le haghaidh focal faire. Tá mé ag iarraidh ceangal leis an ríomhaire seo trí telnet ar phort 22 agus feicim líne óna dtuigim go bhfuil an nasc á bhunú, tá an freastalaí SSH ag freagairt, ach ar chúis éigin ní spreagann sé dom logáil isteach.

$ telnet 192.168.10.110 22
SSH-2.0-OpenSSH_8.1

Táim ag iarraidh ceangal leis trí VNC agus scáileán dubh a fheiceáil. Cuirim ina luí orm féin go bhfuil an fhadhb leis an ríomhaire iargúlta, mar is féidir liom ceangal go héasca leis an ródaire ón árasán seo ag baint úsáide as an seoladh inmheánach. Socraím, áfach, nascadh le SSH an ríomhaire seo tríd an ródaire agus tá iontas orm a fháil amach go n-éiríonn leis an nasc, agus go n-oibríonn an ríomhaire iargúlta go leor de ghnáth, ach ní féidir leis ceangal le mo ríomhaire freisin.

Bainim an gléas grelan0 ón droichead agus rithim OpenVPN ar an ródaire in árasán 2 agus déan cinnte go n-oibríonn an líonra mar a bhíothas ag súil leis arís agus nach bhfuil na naisc báite. Trí chuardach a dhéanamh tagann mé trasna ar fhóraim ina ndéanann daoine gearán faoi na fadhbanna céanna, áit a moltar dóibh an MTU a ardú. Ní túisce a dúirt ná a rinneadh. Mar sin féin, go dtí go socraíodh an MTU ard go leor - 7000 le haghaidh feistí gretap, breathnaíodh naisc TCP tite nó breathnaíodh rátaí aistrithe íseal. Mar gheall ar an MTU ard le haghaidh gretap, socraíodh na MTUanna do naisc WireGuard Sraith 8000 agus Sraith 7500 go XNUMX agus XNUMX faoi seach.

Rinne mé socrú comhchosúil ar an ródaire ó árasán 3, agus ba é an t-aon difríocht a bhí ann ná gur cuireadh an dara comhéadan gretap darb ainm grelan1 leis an ródaire freastalaí, a cuireadh leis an droichead br-lan freisin.

Tá gach rud ag obair. Anois is féidir leat an tionól gretap a chur isteach sa tosaithe. Dó seo:

Chuir mé na línte seo in /etc/rc.local ar an ródaire in árasán 2:

ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.2
ip link set dev grelan0 mtu 7000
ip link set grelan0 up
brctl addif br-lan grelan0

Cuireadh é seo le /etc/rc.local ar an ródaire in árasán 3:

ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.3
ip link set dev grelan0 mtu 7000
ip link set grelan0 up
brctl addif br-lan grelan0

Agus ar an ródaire freastalaí:

ip link add grelan0 type gretap remote 192.168.31.2 local 192.168.31.1
ip link set dev grelan0 mtu 7000
ip link set grelan0 up
brctl addif br-lan grelan0

ip link add grelan1 type gretap remote 192.168.31.3 local 192.168.31.1
ip link set dev grelan1 mtu 7000
ip link set grelan1 up
brctl addif br-lan grelan1

Tar éis ródairí an chliaint a atosú, fuair mé amach nach raibh siad ag nascadh leis an bhfreastalaí ar chúis éigin. Tar éis dóibh ceangal a dhéanamh lena SSH (ar an drochuair, bhí sshtunnel cumraithe agam roimhe seo), fuarthas amach go raibh WireGuard ar chúis éigin ag cruthú bealach don chríochphointe, ach bhí sé mícheart. Mar sin, le haghaidh 192.168.30.2, léirigh an tábla bealaigh bealach tríd an gcomhéadan pppoe-wan, is é sin, tríd an Idirlíon, cé gur cheart go mbeadh an bealach chuige curtha tríd an gcomhéadan wg0. Tar éis an bealach seo a scriosadh, athchóiríodh an nasc. Ní raibh mé in ann treoracha a fháil áit ar bith maidir le conas iallach a chur ar WireGuard gan na bealaí seo a chruthú. Thairis sin, níor thuig mé fiú an raibh sé seo ina ghné de OpenWRT nó WireGuard féin. Gan dul i ngleic leis an bhfadhb seo le fada an lá, chuir mé líne leis an dá ródaire i script amaithe a scrios an bealach seo:

route del 192.168.30.2

Achoimre

Níl tréigean iomlán de OpenVPN bainte amach agam go fóill, ós rud é uaireanta is gá dom ceangal le líonra nua ó ríomhaire glúine nó fón, agus go ginearálta tá sé dodhéanta gléas gretap a bhunú orthu, ach in ainneoin seo, fuair mé buntáiste sa luas. Ní bhíonn sé deacair a thuilleadh sonraí a aistriú idir árasáin agus, mar shampla, VNC a úsáid. Laghdaigh ping beagán, ach tháinig sé níos cobhsaí:

Agus OpenVPN á úsáid agat:

[r0ck3r@desktop ~]$ ping -c 20 192.168.10.110
PING 192.168.10.110 (192.168.10.110) 56(84) bytes of data.
64 bytes from 192.168.10.110: icmp_seq=1 ttl=64 time=133 ms
...
64 bytes from 192.168.10.110: icmp_seq=20 ttl=64 time=125 ms

--- 192.168.10.110 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19006ms
rtt min/avg/max/mdev = 124.722/126.152/136.907/3.065 ms

Agus WireGuard in úsáid:

[r0ck3r@desktop ~]$ ping -c 20 192.168.10.110
PING 192.168.10.110 (192.168.10.110) 56(84) bytes of data.
64 bytes from 192.168.10.110: icmp_seq=1 ttl=64 time=124 ms
...
64 bytes from 192.168.10.110: icmp_seq=20 ttl=64 time=124 ms
--- 192.168.10.110 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19003ms
rtt min/avg/max/mdev = 123.954/124.423/126.708/0.675 ms

Bíonn tionchar níos mó aige ar an bping ard go dtí an VPS, atá thart ar 61.5 ms

Mar sin féin, tá méadú suntasach tagtha ar an luas. Mar sin, in árasán le ródaire freastalaí tá luas nasc Idirlín 30 Mbit/soic agam, agus in árasáin eile tá sé 5 Mbit/soic. Ag an am céanna, agus OpenVPN á úsáid agam, ní raibh mé in ann luas aistrithe sonraí a bhaint amach idir líonraí níos mó ná 3,8 Mbit/soic de réir léamha iperf, agus chuir WireGuard “treisiú” go dtí an 5 Mbit/soic céanna é.

Cumraíocht WireGuard ar VPS[Interface] Address = 192.168.30.1/24
ListenPort = 51820
PrivateKey = <ЗАКРЫТЫЙ_КЛЮЧ_ДЛЯ_VPS>

[Peer] PublicKey = <ОТКРЫТЫЙ_КЛЮЧ_VPN_1_МС>
AllowedIPs = 192.168.30.2/32

[Peer] PublicKey = <ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК2>
AllowedIPs = 192.168.30.3/32

[Peer] PublicKey = <ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК3>
AllowedIPs = 192.168.30.4/32

Cumraíocht WireGuard ar MS (curtha le /etc/config/network)

#VPN первого уровня - клиент
config interface 'wg0'
        option proto 'wireguard'
        list addresses '192.168.30.2/24'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_1_МС'
        option auto '1'
        option mtu '8000'

config wireguard_wg0
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_1_VPS'
        option endpoint_port '51820'
        option route_allowed_ips '1'
        option persistent_keepalive '25'
        list allowed_ips '192.168.30.0/24'
        option endpoint_host 'IP_АДРЕС_VPS'

#VPN второго уровня - сервер
config interface 'wg1'
        option proto 'wireguard'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_2_МС'
        option listen_port '51821'
        list addresses '192.168.31.1/24'
        option auto '1'
        option mtu '7500'

config wireguard_wg1
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК2'
        list allowed_ips '192.168.31.2'

config wireguard_wg1ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.3

        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК3'
        list allowed_ips '192.168.31.3'

Cumraíocht WireGuard ar MK2 (curtha le /etc/config/network)

#VPN первого уровня - клиент
config interface 'wg0'
        option proto 'wireguard'
        list addresses '192.168.30.3/24'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_1_МК2'
        option auto '1'
        option mtu '8000'

config wireguard_wg0
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_1_VPS'
        option endpoint_port '51820'
        option persistent_keepalive '25'
        list allowed_ips '192.168.30.0/24'
        option endpoint_host 'IP_АДРЕС_VPS'

#VPN второго уровня - клиент
config interface 'wg1'
        option proto 'wireguard'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_2_МК2'
        list addresses '192.168.31.2/24'
        option auto '1'
        option listen_port '51821'
        option mtu '7500'

config wireguard_wg1
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МС'
        option endpoint_host '192.168.30.2'
        option endpoint_port '51821'
        option persistent_keepalive '25'
        list allowed_ips '192.168.31.0/24'

Cumraíocht WireGuard ar MK3 (curtha le /etc/config/network)

#VPN первого уровня - клиент
config interface 'wg0'
        option proto 'wireguard'
        list addresses '192.168.30.4/24'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_1_МК3'
        option auto '1'
        option mtu '8000'

config wireguard_wg0
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_1_VPS'
        option endpoint_port '51820'
        option persistent_keepalive '25'
        list allowed_ips '192.168.30.0/24'
        option endpoint_host 'IP_АДРЕС_VPS'

#VPN второго уровня - клиент
config interface 'wg1'
        option proto 'wireguard'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_2_МК3'
        list addresses '192.168.31.3/24'
        option auto '1'
        option listen_port '51821'
        option mtu '7500'

config wireguard_wg1
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МС'
        option endpoint_host '192.168.30.2'
        option endpoint_port '51821'
        option persistent_keepalive '25'
        list allowed_ips '192.168.31.0/24'

Sna cumraíochtaí a thuairiscítear le haghaidh VPN dara leibhéal, pointe mé cliaint WireGuard chuig calafort 51821. Go teoiriciúil, níl sé seo riachtanach, ós rud é go mbunóidh an cliant nasc ó aon chalafort neamhphribhléideach saor in aisce, ach rinne mé é ionas go bhféadfaí é a thoirmeasc. gach nasc isteach ar chomhéadain wg0 gach ródaire ach amháin naisc UDP ag teacht isteach chuig calafort 51821.

Tá súil agam go mbeidh an t-alt úsáideach do dhuine éigin.

PS Chomh maith leis sin, ba mhaith liom mo script a roinnt a sheolann fógra PUSH chuig mo ghuthán san iarratas WirePusher nuair a bhíonn gléas nua le feiceáil ar mo líonra. Seo an nasc chuig an script: github.com/r0ck3r/device_discover.

Suas chun dáta: Cumraíocht fhreastalaí agus cliaint OpenVPN

Freastalaí OpenVPN

client-to-client

ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/vpn-server.crt
dh /etc/openvpn/server/dh.pem
key /etc/openvpn/server/vpn-server.key

dev tap
ifconfig-pool-persist /etc/openvpn/ipp.txt 0
keepalive 10 60
proto tcp4
server-bridge 192.168.10.1 255.255.255.0 192.168.10.80 192.168.10.254
status /var/log/openvpn-status.log
verb 3
comp-lzo

Cliant OpenVPN

client
tls-client
dev tap
proto tcp
remote VPS_IP 1194 # Change to your router's External IP
resolv-retry infinite
nobind

ca client/ca.crt
cert client/client.crt
key client/client.key
dh client/dh.pem

comp-lzo
persist-tun
persist-key
verb 3

Bhain mé úsáid as easy-rsa chun teastais a ghiniúint

Foinse: will.com

Add a comment