It bouwen fan in router yn SOCKS op in laptop mei Debian 10

Foar in heule jier (of twa) haw ik it publisearjen fan dit artikel útsteld foar de wichtichste reden - ik hie al twa artikels publisearre wêryn ik it proses beskreau fan it meitsjen fan in router yn SOCKS fan in heul gewoane laptop mei Debian.

Sûnt dy tiid is de stabile ferzje fan Debian lykwols bywurke nei Buster, in foldwaande oantal minsken hawwe my privee kontakt opnommen om help te freegjen mei de opset, wat betsjut dat myn eardere artikels net útputtend binne. No, ik sels riede dat de metoaden dy't yn har beskreaun binne net alle finânsjes fan it ynstellen fan Linux foar routing yn SOCKS folslein iepenbierje. Derneist binne se skreaun foar Debian Stretch, en nei it opwurdearjen nei Buster, yn it systemd init-systeem, haw ik lytse feroaringen yn 'e ynteraksje fan tsjinsten opmurken. En yn 'e artikels sels haw ik systemd-networkd net brûkt, hoewol it it bêste is foar komplekse netwurkkonfiguraasjes.

Neist de boppesteande wizigingen waarden de folgjende tsjinsten tafoege oan myn konfiguraasje: hostapd - tsjinst foar virtualisaasje fan tagongspunten, ntp om de tiid fan lokale netwurkkliïnten te syngronisearjen, dnscrypt-proxy om ferbiningen te fersiferjen fia DNS en advertinsjes op lokale netwurkkliïnten út te skeakeljen, en ek, lykas ik earder neamde, systemd-netwurk foar it konfigurearjen fan netwurkynterfaces.

Hjir is in ienfâldich blokdiagram fan 'e ynterne struktuer fan sa'n router.

It bouwen fan in router yn SOCKS op in laptop mei Debian 10

Dat, lit my jo herinnerje wat de doelen fan dizze searje artikels binne:

  1. Rûte alle OS-ferbiningen nei SOCKS, lykas ferbiningen fan alle apparaten op itselde netwurk as de laptop.
  2. De laptop yn myn gefal moat folslein mobyl bliuwe. Dat is, om de kâns te jaan om de buroblêdomjouwing te brûken en net bûn te wêzen oan in fysike lokaasje.
  3. It lêste punt betsjut ferbining en routing allinich fia de ynboude draadloze ynterface.
  4. No, en fansels, it meitsjen fan in wiidweidige gids, lykas ek in analyze fan 'e relevante technologyen nei it bêste fan myn beskieden kennis.

Wat sil wurde behannele yn dit artikel:

  1. gean - download projekt repositories tyn 2 sokkenferplichte om rûte TCP ferkear nei SOCKS, en create_ap - in skript om de opset fan in firtuele tagongspunt te automatisearjen mei hostapd.
  2. tyn 2 sokken - bouwe en ynstallearje de systemd tsjinst op it systeem.
  3. systemd-netwurk - konfigurearje draadloze en firtuele ynterfaces, statyske routingtabellen en pakketomlieding.
  4. create_ap - ynstallearje de systemd tsjinst op it systeem, konfigurearje en starte in firtuele tagongspunt.

Opsjonele stappen:

  • ntp - ynstallearje en konfigurearje in tsjinner om tiid te syngronisearjen op kliïnten foar firtuele tagongspunten.
  • dnscrypt-proxy - wy sille DNS-oanfragen fersiferje, rûte se nei SOCKS en advertinsjedomeinen útskeakelje foar it lokale netwurk.

Wêr is dit alles foar?

Dit is ien fan 'e manieren om TCP-ferbiningen op in lokaal netwurk te befeiligjen. It wichtichste foardiel is dat alle ferbinings wurde makke yn SOCKS, útsein as in statyske rûte wurdt boud foar harren troch de oarspronklike poarte. Dit betsjut dat jo gjin SOCKS-tsjinnerynstellingen hoege op te jaan foar sawol yndividuele programma's as kliïnten op it lokale netwurk - se geane standert allegear nei SOCKS, om't it de standertgateway is oant wy oars oanjaan.

Yn essinsje foegje wy in twadde fersiferingsrouter ta as laptop foar de orizjinele router en brûke de ynternetferbining fan 'e orizjinele router foar de al fersifere SOCKS-oanfragen fan 'e laptop, dy't op syn beurt fersiken fan LAN-kliïnten rûtes en fersiferje.

Fanút it eachpunt fan 'e provider binne wy ​​konstant ferbûn mei ien server mei fersifere ferkear.

Dêrtroch binne alle apparaten ferbûn mei it firtuele tagongspunt fan 'e laptop.

Ynstallearje tun2socks op it systeem

Salang't jo masine ynternet hat, download alle nedige ark.

apt update
apt install git make cmake

Download it badvpn-pakket

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

In map sil ferskine op jo systeem badvpn. Meitsje in aparte map foar de bou

mkdir badvpn-build

Gean nei it

cd badvpn-build

Sammelje tun2socks

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

Ynstallearje op it systeem

make install
  • Parameter -DBUILD_NOTHING_BY_DEFAULT=1 skeakelet de bou fan alle komponinten fan it badvpn-repository út.
  • -DBUILD_TUN2SOCKS=1 befettet in komponint yn 'e gearkomste tyn 2 sokken.
  • make install - sil de tun2socks binêr ynstallearje op jo systeem by /usr/local/bin/badvpn-tun2socks.

Ynstallearje de tun2socks-tsjinst yn systemd

Meitsje in triem /etc/systemd/system/tun2socks.service mei de folgjende ynhâld:

[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 - nimt de namme fan 'e firtuele ynterface dy't wy inisjalisearje mei systemd-networkd.
  • --netif-ipaddr - it netwurkadres fan 'e tun2socks "router" wêrmei de firtuele ynterface is ferbûn. It is better om it apart te meitsjen reservearre subnet.
  • --socks-server-addr - akseptearret socket (адрес:порт SOCKS-tsjinners).

As jo ​​SOCKS-tsjinner ferifikaasje fereasket, kinne jo de parameters opjaan --username и --password.

Folgjende, registrearje de tsjinst

systemctl daemon-reload

En set it oan

systemctl enable tun2socks

Foardat jo de tsjinst begjinne, sille wy it in firtuele netwurkynterface leverje.

Oerskeakelje nei systemd-netwurkd

Wy omfetsje systemd-networkd:

systemctl enable systemd-networkd

Skeakelje aktuele netwurktsjinsten út.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-wachtsje-online is in tsjinst dy't wachtet op in wurkjende netwurkferbining foardat systemd trochgiet om oare tsjinsten te begjinnen dy't ôfhinklik binne fan 'e oanwêzigens fan in netwurk. Wy skeakelje it út as wy oerstappe nei de systemd-netwurk-analog.

Litte wy it direkt ynskeakelje:

systemctl enable systemd-networkd-wait-online

Stel de draadloze netwurkynterface yn

Meitsje in systemd-networkd-konfiguraasjetriem foar de draadloze netwurkynterface /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • namme is de namme fan jo draadloze ynterface. Identifisearje it mei it kommando ip a.
  • IPForward - in rjochtline dy't pakketomlieding mooglik makket op in netwurkynterface.
  • Adres is ferantwurdlik foar it tawizen fan in IP-adres oan de draadloze ynterface. Wy spesifisearje it statysk om't mei de lykweardige rjochtline DHCP=yes, systemd-networkd makket in standert gateway op it systeem. Dan sil alle ferkear troch de oarspronklike poarte gean, en net troch de takomstige firtuele ynterface op in oar subnet. Jo kinne de hjoeddeistige standertgateway kontrolearje mei it kommando ip r

Meitsje in statyske rûte foar de SOCKS-tsjinner op ôfstân

As jo ​​SOCKS-tsjinner net lokaal is, mar op ôfstân, dan moatte jo der in statyske rûte foar meitsje. Om dit te dwaan, foegje in seksje ta Route oan it ein fan it konfiguraasjetriem foar draadloze ynterface dat jo makke hawwe mei de folgjende ynhâld:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway - dit is de standert gateway as it adres fan jo orizjinele tagongspunt.
  • Destination - SOCKS tsjinner adres.

Konfigurearje wpa_supplicant foar systemd-networkd

systemd-networkd brûkt wpa_supplicant om te ferbinen mei in feilich tagongspunt. As jo ​​​​besykje de draadloze interface te "ferheegje", start systemd-networkd de tsjinst wpa_supplicant@имяwêr namme is de namme fan de draadloze ynterface. As jo ​​systemd-networkd foar dit punt net hawwe brûkt, dan mist dizze tsjinst wierskynlik op jo systeem.

Dus meitsje it mei it kommando:

systemctl enable wpa_supplicant@wlp6s0

ik brûkte wlp6s0 as de namme fan syn draadloze ynterface. Jo namme kin oars wêze. Jo kinne it werkenne mei it kommando ip l.

No de oanmakke tsjinst wpa_supplicant@wlp6s0 sil lansearre wurde as de draadloze ynterface "ferhege" is, lykwols sil it op syn beurt sykje nei de SSID- en wachtwurdynstellingen fan it tagongspunt yn it bestân /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Dêrom moatte jo it oanmeitsje mei it hulpprogramma wpa_passphrase.

Om dit te dwaan, útfiere it kommando:

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

wêr SSID is de namme fan jo tagongspunt, wachtwurd is it wachtwurd, en wlp6s0 - de namme fan jo draadloze ynterface.

Inisjalisearje de firtuele ynterface foar tun2socks

Meitsje in bestân om in nije firtuele ynterface yn it systeem te inisjalisearjen/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • namme is de namme dy't systemd-networkd sil tawize oan de takomstige firtuele ynterface as it wurdt inisjalisearre.
  • Soart is in soarte fan firtuele ynterface. Ut de namme fan de tun2socks tsjinst, kinne jo riede dat it brûkt in ynterface lykas tun.
  • netdev is de útwreiding fan triemmen dy't systemd-networkd Brûkt om firtuele netwurkynterfaces te initialisearjen. It adres en oare netwurkynstellingen foar dizze ynterfaces wurde spesifisearre yn .netwurk-bestannen.

Meitsje in triem lykas dit /etc/systemd/network/25-tun2socks.network mei de folgjende ynhâld:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name - de namme fan 'e firtuele ynterface wêryn jo hawwe opjûn netdev-map.
  • Address - IP-adres dat sil wurde tawiisd oan de firtuele ynterface. Moat op itselde netwurk wêze as it adres dat jo opjûn hawwe yn 'e tun2socks-tsjinst
  • Gateway - IP-adres fan 'e "router" tyn 2 sokken, dy't jo opjûn hawwe by it meitsjen fan de systemd tsjinst.

Dus de ynterface tyn 2 sokken hat in adres 172.16.1.2, en de tsjinst tyn 2 sokken - 172.16.1.1, dat is, it is de poarte foar alle ferbiningen fan 'e firtuele ynterface.

Stel in firtuele tagongspunt yn

Ynstallearje ôfhinklikens:

apt install util-linux procps hostapd iw haveged

Download de repository create_ap nei jo auto:

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

Gean nei de repository map op jo masine:

cd create_ap

Ynstallearje op it systeem:

make install

In konfiguraasje sil ferskine op jo systeem /etc/create_ap.conf. Hjir binne de wichtichste bewurkingsopsjes:

  • GATEWAY=10.0.0.1 - it is better om it in apart reservearre subnet te meitsjen.
  • NO_DNS=1 - útskeakelje, om't dizze parameter wurdt beheard troch de firtuele ynterface systemd-networkd.
  • NO_DNSMASQ=1 - útsette it foar deselde reden.
  • WIFI_IFACE=wlp6s0 - laptop draadloze ynterface.
  • INTERNET_IFACE=tun2socks - in firtuele ynterface makke foar tun2socks.
  • SSID=hostapd - namme fan it firtuele tagongspunt.
  • PASSPHRASE=12345678 - wachtwurd.

Ferjit net de tsjinst yn te skeakeljen:

systemctl enable create_ap

DHCP-tsjinner ynskeakelje yn systemd-networkd

Tsjinst create_ap inisjalisearret in firtuele ynterface yn it systeem ap0. Yn teory hinget dnsmasq op dizze ynterface, mar wêrom ekstra tsjinsten ynstallearje as systemd-networkd in ynboude DHCP-tsjinner befettet?

Om it yn te skeakeljen, sille wy de netwurkynstellingen definiearje foar it firtuele punt. Om dit te dwaan, meitsje in bestân /etc/systemd/network/25-ap0.network mei de folgjende ynhâld:

[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

Nei de create_ap-tsjinst initialisearret de firtuele ynterface ap0, systemd-networkd sil it automatysk in IP-adres tawize en de DHCP-tsjinner ynskeakelje.

Strings EmitDNS=yes и DNS=10.0.0.1 ferstjoere DNS-tsjinnerynstellingen nei apparaten ferbûn mei it tagongspunt.

As jo ​​​​net fan plan binne in lokale DNS-tsjinner te brûken - yn myn gefal is it dnscrypt-proxy - kinne jo ynstallearje DNS=10.0.0.1 в DNS=192.168.1.1wêr 192.168.1.1 - it adres fan jo oarspronklike gateway. Dan sille DNS-oanfragen foar jo host en lokale netwurk net fersifere gean fia de servers fan 'e provider.

EmitNTP=yes и NTP=192.168.1.1 oerdracht NTP ynstellings.

Itselde jildt foar de line NTP=10.0.0.1.

Ynstallearje en konfigurearje NTP-tsjinner

Ynstallearje op it systeem:

apt install ntp

Bewurkje de konfiguraasje /etc/ntp.conf. Kommentearje de adressen fan standert swimbaden:

#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

Foegje iepenbiere serveradressen ta, bygelyks Google Public NTP:

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

Jou tagong ta de tsjinner oan kliïnten op jo netwurk:

restrict 10.0.0.0 mask 255.255.255.0

Ynskeakelje útstjoering nei jo netwurk:

broadcast 10.0.0.255

As lêste, foegje de adressen fan dizze servers ta oan 'e statyske routingtabel. Om dit te dwaan, iepenje it konfiguraasjetriem foar draadloze ynterface /etc/systemd/network/25-wlp6s0.network en tafoegje oan 'e ein fan' e seksje 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

Jo kinne de adressen fan jo NTP-tsjinners fine mei it hulpprogramma host as folget:

host time1.google.com

Ynstallearje dnscrypt-proxy, ferwiderje advertinsjes en ferbergje DNS-ferkear fan jo provider

apt install dnscrypt-proxy

Bewurkje de socket om DNS-fragen foar host en lokaal netwurk te tsjinjen /lib/systemd/system/dnscrypt-proxy.socket. Feroarje de folgjende rigels:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Op 'e nij starte systemd:

systemctl daemon-reload

Bewurkje de konfiguraasje /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Om dnscrypt-proxy-ferbiningen troch tun2socks te routeren, foegje hjirûnder ta:

force_tcp = true

Bewurkje de konfiguraasje /etc/resolv.conf, dy't de DNS-tsjinner fertelt oan de host.

nameserver 127.0.0.1
nameserver 192.168.1.1

De earste rigel makket it gebrûk fan dnscrypt-proxy mooglik, de twadde rigel brûkt de orizjinele gateway yn it gefal dat de dnscrypt-proxy-tsjinner net beskikber is.

Done!

Reboot of stopje it útfieren fan netwurktsjinsten:

systemctl stop networking NetworkManager NetworkManager-wait-online

En werstart alle nedige:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Nei in herstarten of opnij starte, sille jo in twadde tagongspunt hawwe dat de host- en LAN-apparaten nei SOCKS bringt.

Dit is hoe't de útfier derút sjocht ip a gewoane laptop:

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

As gefolch,

  1. De provider sjocht allinich de fersifere ferbining mei jo SOCKS-tsjinner, wat betsjut dat se neat sjogge.
  2. En dochs sjocht it jo NTP-oanfragen, om dit te foarkommen, ferwiderje statyske rûtes foar NTP-tsjinners. It is lykwols net wis dat jo SOCKS-tsjinner it NTP-protokol lit.

Crutch opspoard op Debain 10

As jo ​​besykje de netwurktsjinst fan 'e konsole opnij te begjinnen, sil it mislearje mei in flater. Dit komt troch it feit dat in diel dêrfan yn 'e foarm fan in firtuele ynterface is bûn oan' e tun2socks tsjinst, wat betsjut dat it wurdt brûkt. Om de netwurktsjinst opnij te begjinnen, moatte jo earst de tun2socks-tsjinst stopje. Mar, tink ik, as jo lêze oant it ein, dit is perfoarst gjin probleem foar jo!

referinsjes

  1. Statyske routing op Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Dit skript makket in NATed of Bridged WiFi Access Point.
  5. dnscrypt-proxy 2 - In fleksibele DNS-proxy, mei stipe foar fersifere DNS-protokollen.

Boarne: www.habr.com