ProHoster > Blog > Bestjoer > It bouwen fan in router yn SOCKS op in laptop mei Debian 10
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.
Dat, lit my jo herinnerje wat de doelen fan dizze searje artikels binne:
Rûte alle OS-ferbiningen nei SOCKS, lykas ferbiningen fan alle apparaten op itselde netwurk as de laptop.
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.
It lêste punt betsjut ferbining en routing allinich fia de ynboude draadloze ynterface.
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:
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.
tyn 2 sokken - bouwe en ynstallearje de systemd tsjinst op it systeem.
systemd-netwurk - konfigurearje draadloze en firtuele ynterfaces, statyske routingtabellen en pakketomlieding.
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
--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.
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.
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.
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:
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:
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:
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.
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:
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,
De provider sjocht allinich de fersifere ferbining mei jo SOCKS-tsjinner, wat betsjut dat se neat sjogge.
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!