Bou 'n router in SOCKS op 'n Debian 10-skootrekenaar

Vir 'n hele jaar (of twee) stel ek die publikasie van hierdie artikel uit vir die hoofrede - ek het reeds twee artikels gepubliseer waarin ek die proses beskryf het om 'n router in SOCKS vanaf die mees gewone skootrekenaar met Debian te skep.

Sedert Debian se stabiele weergawe egter na Buster opgegradeer is, het ek 'n redelike hoeveelheid mense na my gehad wat hulp gevra het met die opstelling, wat beteken dat my vorige artikels nie volledig is nie. Wel, ek self het geraai dat die metodes wat daarin uiteengesit word, nie al die subtiliteite van die opstel van Linux vir roetering na SOCKS ten volle openbaar nie. Boonop is dit vir Debian Stretch geskryf, en na die opgradering na Buster, in die systemd init-stelsel, het ek 'n effense verandering in die interaksie van dienste opgemerk. En in die artikels self het ek nie systemd-networkd gebruik nie, hoewel dit die beste geskik is vir komplekse netwerkkonfigurasies.

Benewens die bogenoemde veranderinge, is die volgende dienste by my konfigurasie gevoeg: hostapd - diens vir virtualisering van die toegangspunt, NTP om die tyd van plaaslike netwerkkliënte te sinchroniseer, dnscrypt-instaanbediener om verbindings via die DNS-protokol te enkripteer en advertensies op plaaslike netwerkkliënte uit te skakel, en ook, soos ek vroeër genoem het, systemd-netwerkd vir die opstel van netwerkkoppelvlakke.

Hier is die eenvoudigste blokdiagram van die interne struktuur van so 'n router.

Bou 'n router in SOCKS op 'n Debian 10-skootrekenaar

Dus, ek sal jou herinner aan watter doelwitte die reeks van hierdie artikels nastreef:

  1. Lei alle OS-verbindings na SOCKS, sowel as verbindings van alle toestelle wat op dieselfde netwerk as die skootrekenaar is.
  2. Die skootrekenaar in my geval moet ten volle mobiel bly. Dit wil sê om die geleentheid te gee om die lessenaaromgewing te gebruik en nie aan 'n fisiese ligging gekoppel te wees nie.
  3. Die laaste punt impliseer verbinding en roetering slegs deur die ingeboude draadlose koppelvlak.
  4. Wel, natuurlik, die skep van 'n volledige gids, sowel as 'n ontleding van die relevante tegnologieë na die beste van my beskeie kennis.

Wat sal in hierdie artikel behandel word:

  1. git - laai projekbewaarplekke af tun2sokkiesvereis om TCP-verkeer na SOCKS te stuur, en skep_ap - 'n skrip om die konfigurasie van 'n virtuele toegangspunt te outomatiseer met behulp van hostapd.
  2. tun2sokkies - bou en installeer die systemd-diens op die stelsel.
  3. systemd-netwerkd - konfigureer draadlose en virtuele koppelvlakke, statiese roeteringstabelle en pakketaanstuur.
  4. skep_ap - installeer die systemd-diens in die stelsel, stel die virtuele toegangspunt in en voer dit uit.

Opsionele stappe:

  • NTP - installeer en konfigureer die bediener vir tydsinchronisasie op virtuele toegangspuntkliënte.
  • dnscrypt-instaanbediener - enkripteer DNS-versoeke, stuur dit na SOCKS en deaktiveer advertensiedomeine vir die plaaslike netwerk.

Waarvoor is dit alles?

Dit is een van die maniere om die beskerming van TCP-verbindings op 'n plaaslike netwerk te organiseer. Die grootste voordeel is dat alle verbindings na SOCKS gaan, tensy 'n statiese roete vir hulle deur die oorspronklike poort gebou word. Dit beteken dat jy nie SOCKS-bedienerinstellings aan individuele programme of kliënte op die plaaslike netwerk hoef te skryf nie - hulle gaan almal by verstek na SOCKS, aangesien dit die verstekpoort is, totdat ons anders spesifiseer.

In wese voeg ons 'n tweede enkripsie-roeteerder as 'n skootrekenaar voor die oorspronklike roeteerder en gebruik die oorspronklike roeteerder se internetverbinding vir die skootrekenaar se reeds SOCKS-geënkripteerde versoeke, wat op sy beurt versoeke van LAN-kliënte roeteer en enkripteer.

Vanuit die verskaffer se oogpunt is ons voortdurend aan dieselfde bediener gekoppel met geïnkripteer verkeer.

Gevolglik is alle toestelle aan die virtuele toegangspunt van die skootrekenaar gekoppel.

Installeer tun2socks op jou stelsel

Solank jy internet op jou masjien het, laai al die nodige gereedskap af.

apt update
apt install git make cmake

Laai die badvpn-pakket af

git clone https://github.com/ambrop72/badvpn

'n gids sal op jou stelsel verskyn badvpn. Skep 'n aparte boulêergids

mkdir badvpn-build

Gaan daarin

cd badvpn-build

Versamel tun2socks

cmake ../badvpn -DBUILD_NOTHING_BY_DEFAULT=1 -DBUILD_TUN2SOCKS=1

Installeer in die stelsel

make install
  • Parameter -DBUILD_NOTHING_BY_DEFAULT=1 deaktiveer die bou van alle badvpn-bewaarplekkomponente.
  • -DBUILD_TUN2SOCKS=1 sluit 'n komponent in die samestelling in tun2sokkies.
  • make install - sal die tun2socks binary op jou stelsel installeer by /usr/local/bin/badvpn-tun2socks.

Installeer tun2socks-diens in systemd

Skep 'n lêer /etc/systemd/system/tun2socks.service met die volgende inhoud:

[Unit]
Description=SOCKS TCP Relay

[Service]
ExecStart=/usr/local/bin/badvpn-tun2socks --tundev tun2socks --netif-ipaddr 172.16.1.1 --netif-netmask 255.255.255.0 --socks-server-addr 127.0.0.1:9050

[Install]
WantedBy=multi-user.target
  • --tundev - neem die naam van die virtuele koppelvlak wat ons inisialiseer met systemd-networkd.
  • --netif-ipaddr - netwerkadres van die "router" tun2socks, waaraan die virtuele koppelvlak gekoppel is. Dit is beter om dit apart te maak gereserveerde subnet.
  • --socks-server-addr - aanvaar 'n sok (адрес:порт SOCKS-bediener).

As jou SOCKS-bediener stawing vereis, kan jy opsies spesifiseer --username и --password.

Registreer dan die diens

systemctl daemon-reload

En skakel aan

systemctl enable tun2socks

Voordat ons die diens begin, sal ons dit voorsien van 'n virtuele netwerkkoppelvlak.

Skakel oor na systemd-networkd

Skakel aan systemd-networkd:

systemctl enable systemd-networkd

Deaktiveer huidige netwerkdienste.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-wag-aanlyn is 'n diens wat wag vir 'n werkende netwerkverbinding voordat systemd voortgaan om ander netwerkafhanklike dienste te begin. Ons deaktiveer dit terwyl ons na die systemd-netwerkd analoog beweeg.

Kom ons aktiveer dit dadelik:

systemctl enable systemd-networkd-wait-online

Stel die draadlose netwerkkoppelvlak op

Skep 'n systemd-networkd-konfigurasielêer vir die draadlose netwerkkoppelvlak /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Naam is die naam van jou draadlose koppelvlak. Identifiseer dit met die opdrag ip a.
  • IP Aanstuur is 'n opdrag wat pakkie-aanstuur moontlik maak op 'n netwerkkoppelvlak.
  • Adres is verantwoordelik vir die toewys van 'n IP-adres aan die draadlose koppelvlak. Ons spesifiseer dit staties, want met die ekwivalente richtlijn DHCP=yes, systemd-networkd skep 'n verstekpoort op die stelsel. Dan sal alle verkeer deur die oorspronklike poort gaan, en nie deur die toekomstige virtuele koppelvlak op 'n ander subnet nie. U kan die huidige verstekpoort met die opdrag nagaan ip r

Skep 'n statiese roete vir die afgeleë SOCKS-bediener

As jou SOCKS-bediener nie plaaslik is nie, maar afgeleë, dan moet jy 'n statiese roete daarvoor skep. Om dit te doen, voeg 'n afdeling by Route aan die einde van die draadlose koppelvlak-konfigurasielêer wat jy geskep het met die volgende inhoud:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway is die verstekpoort of die adres van jou oorspronklike toegangspunt.
  • Destination - SOCKS-bedieneradres.

Stel wpa_supplicant op vir systemd-networkd

systemd-networkd gebruik wpa_supplicant om aan 'n veilige toegangspunt te koppel. Wanneer jy probeer om 'n draadlose koppelvlak te "opbring", begin systemd-networkd 'n diens wpa_supplicant@имяWaar naam is die naam van die draadlose koppelvlak. As jy tot op hierdie stadium nog nie systemd-networkd gebruik het nie, het jy waarskynlik nie hierdie diens op jou stelsel nie.

So skep dit met die opdrag:

systemctl enable wpa_supplicant@wlp6s0

ek het gebruik wlp6s0 as die naam van jou draadlose koppelvlak. Jou naam kan anders wees. Jy kan dit herken met die opdrag ip l.

Nou geskep diens wpa_supplicant@wlp6s0 sal geloods word wanneer die draadlose koppelvlak "op" is, maar dit sal op sy beurt die SSID en wagwoordinstellings van die toegangspunt in die lêer soek /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Daarom moet jy dit skep met die hulpprogram wpa_passphrase.

Om dit te doen, voer die opdrag uit:

wpa_passphrase SSID password>/etc/wpa_supplicant/wpa_supplicant-wlp6s0.conf

waar SSID is die naam van jou toegangspunt, wagwoord is die wagwoord, en wlp6s0 is die naam van jou draadlose koppelvlak.

Inisialiseer virtuele koppelvlak vir tun2socks

Skep 'n lêer om 'n nuwe virtuele koppelvlak op die stelsel te inisialiseer/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Naam is die naam wat systemd-networkd aan die toekomstige virtuele koppelvlak sal toeken wanneer dit geïnisialiseer word.
  • Kind is die tipe virtuele koppelvlak. Van die naam van die tun2socks-diens kan jy raai dat dit 'n koppelvlak soos tun.
  • netdev is die uitbreiding van die lêers wat systemd-networkd gebruik om virtuele netwerkkoppelvlakke te inisialiseer. Die adres en ander netwerkinstellings vir hierdie koppelvlakke word gespesifiseer in .netwerk-lêers.

Skep so 'n lêer /etc/systemd/network/25-tun2socks.network met die volgende inhoud:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name is die naam van die virtuele koppelvlak waarin jy gespesifiseer het netdev-lêer.
  • Address — Die IP-adres wat aan die virtuele koppelvlak toegeken sal word. Moet op dieselfde netwerk wees as die adres wat jy in die tun2socks-diens verskaf het
  • Gateway - IP-adres van die "router" tun2sokkies, wat u gespesifiseer het toe u die systemd-diens geskep het.

Dus die koppelvlak tun2sokkies het 'n adres 172.16.1.2, en die diens tun2sokkies - 172.16.1.1, dit wil sê, dit is die poort vir alle verbindings vanaf die virtuele koppelvlak.

Stel 'n virtuele hotspot op

Installeer afhanklikhede:

apt install util-linux procps hostapd iw haveged

Laai die bewaarplek af skep_ap na jou kar:

git clone https://github.com/oblique/create_ap

Navigeer na die bewaarplekgids op jou masjien:

cd create_ap

Installeer in die stelsel:

make install

config sal op jou stelsel verskyn /etc/create_ap.conf. Hier is die belangrikste redigering opsies:

  • GATEWAY=10.0.0.1 - dit is beter om 'n aparte gereserveerde subnet te maak.
  • NO_DNS=1 - skakel af, aangesien hierdie parameter deur die systemd-networkd virtuele koppelvlak beheer sal word.
  • NO_DNSMASQ=1 - skakel af vir dieselfde rede.
  • WIFI_IFACE=wlp6s0 - skootrekenaar draadlose koppelvlak.
  • INTERNET_IFACE=tun2socks is 'n virtuele koppelvlak wat vir tun2socks geskep is.
  • SSID=hostapd — naam van die virtuele toegangspunt.
  • PASSPHRASE=12345678 - wagwoord.

Moenie vergeet om die diens te aktiveer nie:

systemctl enable create_ap

Aktiveer DHCP-bediener in systemd-networkd

Die diens create_ap inisialiseer 'n virtuele koppelvlak in die stelsel ap0. In teorie “hang” dnsmasq aan hierdie koppelvlak, maar hoekom ekstra dienste installeer as systemd-networkd 'n ingeboude DHCP-bediener bevat?

Om dit te aktiveer, kom ons definieer die netwerkinstellings vir die virtuele punt. Om dit te doen, skep 'n lêer /etc/systemd/network/25-ap0.network met die volgende inhoud:

[Match]
Name=ap0

[Network]
Address=10.0.0.1/24
DHCPServer=yes

[DHCPServer]
EmitDNS=yes
DNS=10.0.0.1
EmitNTP=yes
NTP=10.0.0.1

Nadat die create_ap-diens die virtuele koppelvlak geïnisialiseer het ap0, systemd-networkd sal outomaties 'n IP-adres daaraan toewys en 'n DHCP-bediener aktiveer.

Snare EmitDNS=yes и DNS=10.0.0.1 stuur DNS-bedienerinstellings na toestelle wat aan die toegangspunt gekoppel is.

As jy nie van plan is om 'n plaaslike DNS-bediener te gebruik nie - in my geval is dit dnscrypt-proxy - kan jy installeer DNS=10.0.0.1 в DNS=192.168.1.1Waar 192.168.1.1 is die adres van jou oorspronklike poort. Dan sal die DNS-navrae van jou gasheer en plaaslike netwerk ongeënkripteer gaan deur die verskaffer se bedieners.

EmitNTP=yes и NTP=192.168.1.1 slaag NTP-instellings.

Dieselfde geld vir die lyn NTP=10.0.0.1.

Installeer en konfigureer 'n NTP-bediener

Installeer in die stelsel:

apt install ntp

Wysig die konfigurasie /etc/ntp.conf. Lewer kommentaar op die adresse van die standaard swembaddens:

#pool 0.debian.pool.ntp.org iburst
#pool 1.debian.pool.ntp.org iburst
#pool 2.debian.pool.ntp.org iburst
#pool 3.debian.pool.ntp.org iburst

Voeg publieke bedieneradresse by, soos Google Public NTP:

server time1.google.com ibrust
server time2.google.com ibrust
server time3.google.com ibrust
server time4.google.com ibrust

Gee toegang tot die bediener aan kliënte vanaf jou netwerk:

restrict 10.0.0.0 mask 255.255.255.0

Aktiveer uitsaai op jou netwerk:

broadcast 10.0.0.255

Voeg ten slotte die adresse van hierdie bedieners by die statiese roeteringtabel. Om dit te doen, maak die draadlose koppelvlak-konfigurasielêer oop /etc/systemd/network/25-wlp6s0.network en voeg by aan die einde van die afdeling Route.

[Route]
Gateway=192.168.1.1
Destination=216.239.35.0

[Route]
Gateway=192.168.1.1
Destination=216.239.35.4

[Route]
Gateway=192.168.1.1
Destination=216.239.35.8

[Route]
Gateway=192.168.1.1
Destination=216.239.35.12

U kan die adresse van u NTP-bedieners uitvind deur die hulpprogram te gebruik host soos volg:

host time1.google.com

Installeer dnscrypt-proxy, verwyder advertensies en versteek DNS-verkeer van ISP

apt install dnscrypt-proxy

Om DNS-navrae op die gasheer en plaaslike netwerk te bedien, wysig die sok /lib/systemd/system/dnscrypt-proxy.socket. Verander die volgende reëls:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Begin oor systemd:

systemctl daemon-reload

Wysig die konfigurasie /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Om dnscrypt-proxy-verbindings deur tun2socks te stuur, voeg die volgende by:

force_tcp = true

Wysig die konfigurasie /etc/resolv.conf, wat die DNS-bediener aan die gasheer vertel.

nameserver 127.0.0.1
nameserver 192.168.1.1

Die eerste reël maak die gebruik van dnscrypt-instaanbediener moontlik, die tweede een gebruik die oorspronklike poort ingeval die dnscrypt-instaanbediener nie beskikbaar is nie.

Gedoen!

Herlaai of hou op om netwerkdienste te laat loop:

systemctl stop networking NetworkManager NetworkManager-wait-online

En herbegin al die nodige:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Na 'n herlaai of herbegin, sal jy 'n tweede toegangspunt hê wat die gasheer en LAN-toestelle na SOCKS stuur.

Die uitset lyk so ip a gewone skootrekenaar:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: tun2socks: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 500
    link/none 
    inet 172.16.1.2/24 brd 172.16.1.255 scope global tun2socks
       valid_lft forever preferred_lft forever
    inet6 fe80::122b:260:6590:1b0e/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever
3: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether e8:11:32:0e:01:50 brd ff:ff:ff:ff:ff:ff
4: wlp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 4c:ed:de:cb:cf:85 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global wlp6s0
       valid_lft forever preferred_lft forever
    inet6 fe80::4eed:deff:fecb:cf85/64 scope link 
       valid_lft forever preferred_lft forever
5: ap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 4c:ed:de:cb:cf:86 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/24 brd 10.0.0.255 scope global ap0
       valid_lft forever preferred_lft forever
    inet6 fe80::4eed:deff:fecb:cf86/64 scope link 
       valid_lft forever preferred_lft forever

Uiteindelik

  1. Die verskaffer sien slegs 'n geënkripteerde verbinding met jou SOCKS-bediener, wat beteken dat hy niks sien nie.
  2. Dit sien steeds jou NTP-versoeke, om dit te voorkom, verwyder statiese roetes vir NTP-bedieners. Dit is egter nie seker dat jou SOCKS-bediener die NTP-protokol toelaat nie.

Crutch gesien op Debain 10

As jy probeer om die netwerkdiens vanaf die konsole te herbegin, sal dit ineenstort met 'n fout. Dit is te wyte aan die feit dat sy deel in die vorm van 'n virtuele koppelvlak gekoppel is aan die tun2socks-diens, wat beteken dat dit gebruik word. Om die netwerkdiens te herbegin, moet jy eers die tun2socks-diens stop. Maar, dink ek, as jy tot die einde gelees het, is dit beslis nie vir jou 'n probleem nie!

verwysings

  1. Statiese roetering op Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks ambrop72/badvpn Wiki GitHub
  4. oblique/create_ap: Hierdie skrif skep 'n NATed of Bridged WiFi Access Point.
  5. dnscrypt-proxy 2 - 'n Buigsame DNS-instaanbediener, met ondersteuning vir geënkripteerde DNS-protokolle.

Bron: will.com