Pagbuo ng router sa SOCKS sa isang laptop na may Debian 10

Sa isang buong taon (o dalawa) ipinagpaliban ko ang pag-publish ng artikulong ito para sa pangunahing dahilan - nai-publish ko na ang dalawang artikulo kung saan inilarawan ko ang proseso ng paglikha ng isang router sa SOCKS mula sa isang napaka-ordinaryong laptop na may Debian.

Gayunpaman, mula noon ang matatag na bersyon ng Debian ay na-update sa Buster, isang sapat na bilang ng mga tao ang nakipag-ugnayan sa akin nang pribadong humihingi ng tulong sa pag-setup, na nangangahulugan na ang aking mga nakaraang artikulo ay hindi kumpleto. Well, ako mismo ay nahulaan na ang mga pamamaraan na nakabalangkas sa mga ito ay hindi ganap na nagpapakita ng lahat ng mga intricacies ng pag-set up ng Linux para sa pagruruta sa SOCKS. Bilang karagdagan, isinulat ang mga ito para sa Debian Stretch, at pagkatapos mag-upgrade sa Buster, sa systemd init system, napansin ko ang maliliit na pagbabago sa pakikipag-ugnayan ng mga serbisyo. At sa mga artikulo mismo, hindi ako gumamit ng systemd-networkd, bagaman ito ay pinakaangkop para sa mga kumplikadong pagsasaayos ng network.

Bilang karagdagan sa mga pagbabago sa itaas, ang mga sumusunod na serbisyo ay idinagdag sa aking configuration: hostapd - serbisyo para sa virtualization ng access point, ntp upang i-synchronize ang oras ng mga kliyente ng lokal na network, dnscrypt-proxy upang i-encrypt ang mga koneksyon sa pamamagitan ng DNS at huwag paganahin ang advertising sa mga kliyente ng lokal na network, at gayundin, tulad ng nabanggit ko kanina, systemd-networkd para sa pag-configure ng mga interface ng network.

Narito ang isang simpleng block diagram ng panloob na istraktura ng naturang router.

Pagbuo ng router sa SOCKS sa isang laptop na may Debian 10

Kaya, hayaan mong ipaalala ko sa iyo kung ano ang mga layunin ng seryeng ito ng mga artikulo:

  1. Iruta ang lahat ng koneksyon sa OS sa SOCKS, pati na rin ang mga koneksyon mula sa lahat ng device sa parehong network ng laptop.
  2. Ang laptop sa aking kaso ay dapat manatiling ganap na mobile. Iyon ay, upang bigyan ng pagkakataon na gamitin ang desktop environment at hindi nakatali sa isang pisikal na lokasyon.
  3. Ang huling punto ay nagpapahiwatig ng koneksyon at pagruruta lamang sa pamamagitan ng built-in na wireless interface.
  4. Well, at siyempre, ang paglikha ng isang komprehensibong gabay, pati na rin ang pagsusuri ng mga nauugnay na teknolohiya sa abot ng aking katamtamang kaalaman.

Ano ang tatalakayin sa artikulong ito:

  1. pumunta — mag-download ng mga repositoryo ng proyekto tun2sockskinakailangan upang iruta ang trapiko ng TCP sa SOCKS, at lumikha_ap — isang script upang i-automate ang setup ng isang virtual na access point na ginagamit hostapd.
  2. tun2socks — buuin at i-install ang systemd service sa system.
  3. systemd-networkd — i-configure ang mga wireless at virtual na interface, mga static na routing table at packet redirection.
  4. lumikha_ap — i-install ang systemd service sa system, i-configure at ilunsad ang isang virtual access point.

Mga opsyonal na hakbang:

  • ntp — i-install at i-configure ang isang server upang i-synchronize ang oras sa mga virtual access point client.
  • dnscrypt-proxy — ie-encrypt namin ang mga kahilingan sa DNS, iruruta ang mga ito sa SOCKS at idi-disable ang mga domain ng advertising para sa lokal na network.

Para saan ang lahat ng ito?

Ito ay isa sa mga paraan upang ma-secure ang mga koneksyon sa TCP sa isang lokal na network. Ang pangunahing bentahe ay ang lahat ng mga koneksyon ay ginawa sa SOCKS, maliban kung ang isang static na ruta ay binuo para sa kanila sa pamamagitan ng orihinal na gateway. Nangangahulugan ito na hindi mo kailangang tukuyin ang mga setting ng server ng SOCKS para sa alinman sa mga indibidwal na programa o kliyente sa lokal na network - lahat sila ay pumupunta sa SOCKS bilang default, dahil ito ang default na gateway hanggang sa ipahiwatig namin kung hindi man.

Sa pangkalahatan, nagdaragdag kami ng pangalawang pag-encrypt na router bilang isang laptop sa harap ng orihinal na router at ginagamit ang koneksyon sa Internet ng orihinal na router para sa mga naka-encrypt na SOCKS na kahilingan ng laptop, na nagruruta at nag-e-encrypt ng mga kahilingan mula sa mga kliyente ng LAN.

Mula sa pananaw ng provider, palagi kaming nakakonekta sa isang server na may naka-encrypt na trapiko.

Alinsunod dito, ang lahat ng mga device ay konektado sa virtual access point ng laptop.

Mag-install ng tun2socks sa system

Hangga't may internet ang iyong makina, i-download ang lahat ng kinakailangang tool.

apt update
apt install git make cmake

I-download ang badvpn package

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

May lalabas na folder sa iyong system badvpn. Lumikha ng isang hiwalay na folder para sa build

mkdir badvpn-build

Puntahan mo

cd badvpn-build

Kolektahin tun2socks

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

I-install sa system

make install
  • Parametro -DBUILD_NOTHING_BY_DEFAULT=1 hindi pinapagana ang pagbuo ng lahat ng bahagi ng badvpn repository.
  • -DBUILD_TUN2SOCKS=1 may kasamang bahagi sa pagpupulong tun2socks.
  • make install — ay i-install ang tun2socks binary sa iyong system sa /usr/local/bin/badvpn-tun2socks.

I-install ang serbisyo ng tun2socks sa systemd

Gumawa ng file /etc/systemd/system/tun2socks.service na may sumusunod na nilalaman:

[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 - tumatagal ang pangalan ng virtual na interface na sinisimulan namin sa systemd-networkd.
  • --netif-ipaddr — ang network address ng tun2socks “router” kung saan nakakonekta ang virtual interface. Mas mabuting gawin itong hiwalay nakareserbang subnet.
  • --socks-server-addr - tumatanggap ng socket (адрес:порт mga server ng SOCKS).

Kung ang iyong SOCKS server ay nangangailangan ng pagpapatunay, maaari mong tukuyin ang mga parameter --username и --password.

Susunod, irehistro ang serbisyo

systemctl daemon-reload

At i-on ito

systemctl enable tun2socks

Bago simulan ang serbisyo, bibigyan namin ito ng isang virtual na interface ng network.

Lumipat sa systemd-networkd

Isinasama namin systemd-networkd:

systemctl enable systemd-networkd

Huwag paganahin ang kasalukuyang mga serbisyo ng network.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • NetworkManager-wait-online ay isang serbisyong naghihintay ng gumaganang koneksyon sa network bago magpatuloy ang systemd na simulan ang iba pang mga serbisyo na nakadepende sa pagkakaroon ng isang network. Hindi namin ito pinapagana habang lumilipat kami sa systemd-networkd analogue.

Paganahin natin ito kaagad:

systemctl enable systemd-networkd-wait-online

I-set up ang interface ng wireless network

Gumawa ng systemd-networkd configuration file para sa wireless network interface /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Pangalan ay ang pangalan ng iyong wireless interface. Kilalanin ito gamit ang utos ip a.
  • IPForward - isang direktiba na nagbibigay-daan sa pag-redirect ng packet sa isang interface ng network.
  • address ay responsable para sa pagtatalaga ng isang IP address sa wireless interface. Tinukoy namin ito nang static dahil may katumbas na direktiba DHCP=yes, lumilikha ang systemd-networkd ng default na gateway sa system. Pagkatapos ang lahat ng trapiko ay dadaan sa orihinal na gateway, at hindi sa hinaharap na virtual interface sa ibang subnet. Maaari mong suriin ang kasalukuyang default na gateway gamit ang command ip r

Gumawa ng static na ruta para sa remote SOCKS server

Kung ang iyong SOCKS server ay hindi lokal, ngunit malayo, kailangan mong lumikha ng isang static na ruta para dito. Upang gawin ito, magdagdag ng isang seksyon Route hanggang sa dulo ng wireless interface configuration file na iyong ginawa gamit ang sumusunod na content:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway — ito ang default na gateway o ang address ng iyong orihinal na access point.
  • Destination — Address ng server ng SOCKS.

I-configure ang wpa_supplicant para sa systemd-networkd

Ang systemd-networkd ay gumagamit ng wpa_supplicant upang kumonekta sa isang secure na access point. Kapag sinusubukang "itaas" ang wireless interface, sinisimulan ng systemd-networkd ang serbisyo wpa_supplicant@имяSaan pangalan ay ang pangalan ng wireless interface. Kung hindi mo pa nagamit ang systemd-networkd bago ang puntong ito, malamang na nawawala ang serbisyong ito sa iyong system.

Kaya likhain ito gamit ang utos:

systemctl enable wpa_supplicant@wlp6s0

ginamit ko wlp6s0 bilang pangalan ng wireless interface nito. Maaaring iba ang iyong pangalan. Makikilala mo ito sa pamamagitan ng utos ip l.

Ngayon ang nilikha na serbisyo wpa_supplicant@wlp6s0 ay ilulunsad kapag ang wireless interface ay "itinaas", gayunpaman, ito naman, ay hahanapin ang mga setting ng SSID at password ng access point sa file /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Samakatuwid, kailangan mong likhain ito gamit ang utility wpa_passphrase.

Upang gawin ito, patakbuhin ang utos:

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

saan SSID ay ang pangalan ng iyong access point, ang password ay ang password, at wlp6s0 — ang pangalan ng iyong wireless interface.

Simulan ang virtual na interface para sa tun2socks

Lumikha ng isang file upang simulan ang isang bagong virtual na interface sa system/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Pangalan ay ang pangalan na itatalaga ng systemd-networkd sa hinaharap na virtual interface kapag nasimulan ito.
  • Anak ay isang uri ng virtual interface. Mula sa pangalan ng serbisyo ng tun2socks, maaari mong hulaan na gumagamit ito ng isang interface tulad ng tun.
  • netdev ay ang extension ng mga file na systemd-networkd Ginagamit upang simulan ang mga virtual na interface ng network. Ang address at iba pang mga setting ng network para sa mga interface na ito ay tinukoy sa .network-mga file.

Lumikha ng isang file na tulad nito /etc/systemd/network/25-tun2socks.network na may sumusunod na nilalaman:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name — ang pangalan ng virtual interface na iyong tinukoy netdev-file.
  • Address — IP address na itatalaga sa virtual interface. Dapat ay nasa parehong network tulad ng address na iyong tinukoy sa serbisyo ng tun2socks
  • Gateway — IP address ng “router” tun2socks, na iyong tinukoy noong lumilikha ng systemd service.

Kaya ang interface tun2socks may address 172.16.1.2, at ang serbisyo tun2socks - 172.16.1.1, ibig sabihin, ito ang gateway para sa lahat ng koneksyon mula sa virtual na interface.

Mag-set up ng virtual na access point

Mag-install ng mga dependency:

apt install util-linux procps hostapd iw haveged

I-download ang repositoryo create_ap sa iyong sasakyan:

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

Pumunta sa folder ng repositoryo sa iyong makina:

cd create_ap

I-install sa system:

make install

May lalabas na config sa iyong system /etc/create_ap.conf. Narito ang mga pangunahing opsyon sa pag-edit:

  • GATEWAY=10.0.0.1 — mas mabuting gawin itong hiwalay na nakareserbang subnet.
  • NO_DNS=1 - huwag paganahin, dahil ang parameter na ito ay pamamahalaan ng systemd-networkd virtual interface.
  • NO_DNSMASQ=1 - i-off ito para sa parehong dahilan.
  • WIFI_IFACE=wlp6s0 — wireless interface ng laptop.
  • INTERNET_IFACE=tun2socks - isang virtual na interface na nilikha para sa tun2socks.
  • SSID=hostapd — pangalan ng virtual access point.
  • PASSPHRASE=12345678 - password.

Huwag kalimutang paganahin ang serbisyo:

systemctl enable create_ap

Paganahin ang DHCP server sa systemd-networkd

Serbisyo create_ap nagpapasimula ng isang virtual na interface sa system ap0. Sa teorya, ang dnsmasq ay nakabitin sa interface na ito, ngunit bakit mag-install ng mga karagdagang serbisyo kung ang systemd-networkd ay naglalaman ng built-in na DHCP server?

Upang paganahin ito, tutukuyin namin ang mga setting ng network para sa virtual point. Upang gawin ito, lumikha ng isang file /etc/systemd/network/25-ap0.network na may sumusunod na nilalaman:

[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

Matapos simulan ng serbisyong create_ap ang virtual na interface ap0, systemd-networkd ay awtomatikong magtatalaga dito ng isang IP address at paganahin ang DHCP server.

Mga string EmitDNS=yes и DNS=10.0.0.1 magpadala ng mga setting ng DNS server sa mga device na konektado sa access point.

Kung hindi mo planong gumamit ng lokal na DNS server - sa aking kaso ito ay dnscrypt-proxy - maaari mong i-install DNS=10.0.0.1 в DNS=192.168.1.1Saan 192.168.1.1 — ang address ng iyong orihinal na gateway. Pagkatapos, ang mga kahilingan ng DNS para sa iyong host at lokal na network ay mapupunta nang hindi naka-encrypt sa pamamagitan ng mga server ng provider.

EmitNTP=yes и NTP=192.168.1.1 ilipat ang mga setting ng NTP.

Ganun din sa linya NTP=10.0.0.1.

I-install at i-configure ang NTP server

I-install sa system:

apt install ntp

I-edit ang config /etc/ntp.conf. Ikomento ang mga address ng karaniwang pool:

#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

Magdagdag ng mga pampublikong address ng server, halimbawa Google Public NTP:

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

Magbigay ng access sa server sa mga kliyente sa iyong network:

restrict 10.0.0.0 mask 255.255.255.0

Paganahin ang broadcast sa iyong network:

broadcast 10.0.0.255

Panghuli, idagdag ang mga address ng mga server na ito sa static na routing table. Upang gawin ito, buksan ang file ng pagsasaayos ng wireless interface /etc/systemd/network/25-wlp6s0.network at idagdag sa dulo ng seksyon 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

Maaari mong malaman ang mga address ng iyong mga NTP server gamit ang utility host tulad ng sumusunod:

host time1.google.com

I-install ang dnscrypt-proxy, alisin ang mga ad at itago ang trapiko ng DNS mula sa iyong provider

apt install dnscrypt-proxy

Upang maghatid ng mga query sa DNS ng host at lokal na network, i-edit ang socket /lib/systemd/system/dnscrypt-proxy.socket. Baguhin ang mga sumusunod na linya:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

I-restart systemd:

systemctl daemon-reload

I-edit ang config /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Upang iruta ang mga koneksyon sa dnscrypt-proxy sa pamamagitan ng tun2socks, idagdag sa ibaba:

force_tcp = true

I-edit ang config /etc/resolv.conf, na nagsasabi sa DNS server sa host.

nameserver 127.0.0.1
nameserver 192.168.1.1

Ang unang linya ay nagbibigay-daan sa paggamit ng dnscrypt-proxy, ang pangalawang linya ay gumagamit ng orihinal na gateway kung sakaling ang dnscrypt-proxy server ay hindi magagamit.

Tapos na!

I-reboot o ihinto ang pagpapatakbo ng mga serbisyo sa network:

systemctl stop networking NetworkManager NetworkManager-wait-online

At i-restart ang lahat ng kailangan:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Pagkatapos ng pag-reboot o pag-restart, magkakaroon ka ng pangalawang access point na nagruruta sa host at mga LAN device sa SOCKS.

Ito ang hitsura ng output ip a regular na 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

Bilang isang resulta,

  1. Nakikita lang ng provider ang naka-encrypt na koneksyon sa iyong SOCKS server, na nangangahulugang wala silang nakikita.
  2. Gayunpaman, nakikita nito ang iyong mga kahilingan sa NTP, upang maiwasan ito, alisin ang mga static na ruta para sa mga NTP server. Gayunpaman, hindi tiyak na pinapayagan ng iyong SOCKS server ang NTP protocol.

Nakita ang saklay sa Debain 10

Kung susubukan mong i-restart ang serbisyo ng network mula sa console, mabibigo ito nang may error. Ito ay dahil sa ang katunayan na ang bahagi nito sa anyo ng isang virtual na interface ay nakatali sa serbisyo ng tun2socks, na nangangahulugang ito ay ginagamit. Upang i-restart ang serbisyo ng network, kailangan mo munang ihinto ang serbisyo ng tun2socks. Ngunit, sa palagay ko, kung babasahin mo hanggang sa huli, tiyak na hindi ito problema para sa iyo!

sanggunian

  1. Static na pagruruta sa Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Lumilikha ang script na ito ng NATed o Bridged WiFi Access Point.
  5. dnscrypt-proxy 2 — Isang flexible na DNS proxy, na may suporta para sa mga naka-encrypt na DNS protocol.

Pinagmulan: www.habr.com