Xây dựng bộ định tuyến trong SOCKS trên máy tính xách tay với Debian 10

Trong cả một (hoặc hai) năm, tôi đã ngừng xuất bản bài viết này vì lý do chính - tôi đã xuất bản hai bài báo trong đó tôi mô tả quá trình tạo bộ định tuyến trong SOCKS từ một máy tính xách tay rất bình thường với Debian.

Tuy nhiên, kể từ đó phiên bản ổn định của Debian đã được cập nhật lên Buster, đã có đủ số người đã liên hệ riêng với tôi để yêu cầu trợ giúp cài đặt, điều đó có nghĩa là các bài viết trước của tôi chưa đầy đủ. Chà, bản thân tôi đoán rằng các phương pháp được nêu trong đó không bộc lộ đầy đủ tất cả những điều phức tạp của việc thiết lập Linux để định tuyến trong SOCKS. Ngoài ra, chúng được viết cho Debian Stretch và sau khi nâng cấp lên Buster, trong hệ thống init systemd, tôi nhận thấy những thay đổi nhỏ trong tương tác của các dịch vụ. Và trong các bài viết, tôi không sử dụng systemd-networkd, mặc dù nó phù hợp nhất với các cấu hình mạng phức tạp.

Ngoài những thay đổi trên, các dịch vụ sau đã được thêm vào cấu hình của tôi: hostapd - dịch vụ ảo hóa điểm truy cập, ntp để đồng bộ hóa thời gian của các máy khách mạng cục bộ, proxy dnscrypt để mã hóa các kết nối qua DNS và tắt quảng cáo trên các máy khách mạng cục bộ, đồng thời, như tôi đã đề cập trước đó, systemd-mạngd để cấu hình các giao diện mạng.

Đây là sơ đồ khối đơn giản về cấu trúc bên trong của một bộ định tuyến như vậy.

Xây dựng bộ định tuyến trong SOCKS trên máy tính xách tay với Debian 10

Vì vậy, hãy để tôi nhắc bạn mục tiêu của loạt bài viết này là:

  1. Định tuyến tất cả các kết nối hệ điều hành tới SOCKS, cũng như các kết nối từ tất cả các thiết bị trên cùng mạng với máy tính xách tay.
  2. Máy tính xách tay trong trường hợp của tôi phải hoàn toàn di động. Nghĩa là tạo cơ hội sử dụng môi trường máy tính để bàn và không bị ràng buộc vào một vị trí thực tế.
  3. Điểm cuối cùng ngụ ý kết nối và định tuyến chỉ thông qua giao diện không dây tích hợp.
  4. Vâng, và tất nhiên, việc tạo ra một hướng dẫn toàn diện cũng như phân tích các công nghệ liên quan theo kiến ​​thức khiêm tốn nhất của tôi.

Những gì sẽ được đề cập trong bài viết này:

  1. git - tải xuống kho dự án tun2sockscần thiết để định tuyến lưu lượng TCP tới SOCKS và tạo_ap — một tập lệnh để tự động thiết lập điểm truy cập ảo bằng cách sử dụng hostapd.
  2. tun2socks — xây dựng và cài đặt dịch vụ systemd trên hệ thống.
  3. systemd-mạngd — cấu hình giao diện không dây và ảo, bảng định tuyến tĩnh và chuyển hướng gói.
  4. tạo_ap — cài đặt dịch vụ systemd trên hệ thống, định cấu hình và khởi chạy điểm truy cập ảo.

Các bước tùy chọn:

  • ntp — cài đặt và cấu hình một máy chủ để đồng bộ hóa thời gian trên các máy khách có điểm truy cập ảo.
  • proxy dnscrypt — chúng tôi sẽ mã hóa các yêu cầu DNS, định tuyến chúng tới SOCKS và vô hiệu hóa các miền quảng cáo cho mạng cục bộ.

Tại sao những thứ này?

Đây là một trong những cách để bảo mật các kết nối TCP trên mạng cục bộ. Ưu điểm chính là tất cả các kết nối được thực hiện trong SOCKS, trừ khi một tuyến tĩnh được xây dựng cho chúng thông qua cổng ban đầu. Điều này có nghĩa là bạn không cần chỉ định cài đặt máy chủ SOCKS cho từng chương trình hoặc máy khách riêng lẻ trên mạng cục bộ - tất cả chúng đều chuyển đến SOCKS theo mặc định, vì đây là cổng mặc định cho đến khi chúng tôi chỉ định khác.

Về cơ bản, chúng tôi thêm bộ định tuyến mã hóa thứ hai làm máy tính xách tay trước bộ định tuyến ban đầu và sử dụng kết nối Internet của bộ định tuyến ban đầu cho các yêu cầu SOCKS đã được mã hóa của máy tính xách tay, từ đó định tuyến và mã hóa các yêu cầu từ máy khách LAN.

Từ quan điểm của nhà cung cấp, chúng tôi liên tục được kết nối với một máy chủ có lưu lượng được mã hóa.

Theo đó, tất cả các thiết bị đều được kết nối với điểm truy cập ảo của laptop.

Cài đặt tun2socks trên hệ thống

Chỉ cần máy của bạn có internet, hãy tải xuống tất cả các công cụ cần thiết.

apt update
apt install git make cmake

Tải xuống gói badvpn

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

Một thư mục sẽ xuất hiện trên hệ thống của bạn badvpn. Tạo một thư mục riêng cho bản dựng

mkdir badvpn-build

Hãy đến đó

cd badvpn-build

Tụ họp tun2socks

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

Cài đặt trên hệ thống

make install
  • Thông số -DBUILD_NOTHING_BY_DEFAULT=1 vô hiệu hóa việc xây dựng tất cả các thành phần của kho lưu trữ badvpn.
  • -DBUILD_TUN2SOCKS=1 bao gồm một thành phần trong tập hợp tun2socks.
  • make install — sẽ cài đặt tệp nhị phân tun2socks trên hệ thống của bạn tại /usr/local/bin/badvpn-tun2socks.

Cài đặt dịch vụ tun2socks trong systemd

Tạo một tập tin /etc/systemd/system/tun2socks.service với nội dung như sau:

[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 - lấy tên của giao diện ảo mà chúng ta khởi tạo bằng systemd-networkd.
  • --netif-ipaddr — địa chỉ mạng của “bộ định tuyến” tun2socks mà giao diện ảo được kết nối. Tốt nhất nên tách nó ra mạng con dành riêng.
  • --socks-server-addr - chấp nhận ổ cắm (адрес:порт máy chủ SOCKS).

Nếu máy chủ SOCKS của bạn yêu cầu xác thực, bạn có thể chỉ định các tham số --username и --password.

Tiếp theo, đăng ký dịch vụ

systemctl daemon-reload

Và bật nó lên

systemctl enable tun2socks

Trước khi bắt đầu dịch vụ, chúng tôi sẽ cung cấp cho nó giao diện mạng ảo.

Chuyển sang systemd-networkd

Chúng tôi gồm có systemd-networkd:

systemctl enable systemd-networkd

Vô hiệu hóa các dịch vụ mạng hiện tại.

systemctl disable networking NetworkManager NetworkManager-wait-online
  • Trình quản lý mạng-chờ-trực tuyến là dịch vụ chờ kết nối mạng đang hoạt động trước khi systemd tiếp tục khởi động các dịch vụ khác phụ thuộc vào sự hiện diện của mạng. Chúng tôi sẽ vô hiệu hóa nó khi chúng tôi chuyển sang hệ thống tương tự systemd-networkd.

Hãy kích hoạt nó ngay lập tức:

systemctl enable systemd-networkd-wait-online

Thiết lập giao diện mạng không dây

Tạo tệp cấu hình systemd-networkd cho giao diện mạng không dây /etc/systemd/network/25-wlp6s0.network.

[Match]
Name=wlp6s0

[Network]
Address=192.168.1.2/24
IPForward=yes
  • Họ tên là tên của giao diện không dây của bạn. Xác định nó bằng lệnh ip a.
  • IPForward - một lệnh cho phép chuyển hướng gói trên giao diện mạng.
  • Địa Chỉ chịu trách nhiệm gán địa chỉ IP cho giao diện không dây. Chúng tôi chỉ định nó một cách tĩnh vì với lệnh tương đương DHCP=yes, systemd-networkd tạo một cổng mặc định trên hệ thống. Sau đó, tất cả lưu lượng truy cập sẽ đi qua cổng ban đầu chứ không phải qua giao diện ảo trong tương lai trên một mạng con khác. Bạn có thể kiểm tra cổng mặc định hiện tại bằng lệnh ip r

Tạo tuyến tĩnh cho máy chủ SOCKS từ xa

Nếu máy chủ SOCKS của bạn không phải cục bộ mà ở xa, thì bạn cần tạo một tuyến tĩnh cho nó. Để làm điều này, hãy thêm một phần Route đến cuối tệp cấu hình giao diện không dây bạn đã tạo với nội dung sau:

[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
  • Gateway — đây là cổng mặc định hoặc địa chỉ điểm truy cập ban đầu của bạn.
  • Destination — Địa chỉ máy chủ SOCKS.

Định cấu hình wpa_supplicant cho systemd-networkd

systemd-networkd sử dụng wpa_supplicant để kết nối với điểm truy cập an toàn. Khi cố gắng "nâng cao" giao diện không dây, systemd-networkd khởi động dịch vụ wpa_supplicant@имяĐâu tên là tên của giao diện không dây. Nếu bạn chưa sử dụng systemd-networkd trước thời điểm này thì dịch vụ này có thể bị thiếu trên hệ thống của bạn.

Vì vậy, hãy tạo nó bằng lệnh:

systemctl enable wpa_supplicant@wlp6s0

Tôi đã sử dụng wlp6s0 như tên của giao diện không dây của nó. Tên của bạn có thể khác. Bạn có thể nhận ra nó bằng lệnh ip l.

Bây giờ dịch vụ đã tạo wpa_supplicant@wlp6s0 sẽ được khởi chạy khi giao diện không dây được “nâng lên”, tuy nhiên, đến lượt nó, nó sẽ tìm kiếm cài đặt SSID và mật khẩu của điểm truy cập trong tệp /etc/wpa_supplicant/wpa_supplicant-wlp6s0. Do đó, bạn cần tạo nó bằng tiện ích wpa_passphrase.

Để thực hiện việc này, hãy chạy lệnh:

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

đâu SSID là tên điểm truy cập của bạn, mật khẩu là mật khẩu và wlp6s0 — tên giao diện không dây của bạn.

Khởi tạo giao diện ảo cho tun2socks

Tạo file khởi tạo giao diện ảo mới trong hệ thống/etc/systemd/network/25-tun2socks.netdev

[NetDev]
Name=tun2socks
Kind=tun
  • Họ tên là tên mà systemd-networkd sẽ gán cho giao diện ảo trong tương lai khi nó được khởi tạo.
  • Loại là một loại giao diện ảo. Từ tên của dịch vụ tun2socks, bạn có thể đoán rằng nó sử dụng giao diện như tun.
  • netdev là phần mở rộng của tập tin systemd-networkd Sử dụng để khởi tạo giao diện mạng ảo. Địa chỉ và các cài đặt mạng khác cho các giao diện này được chỉ định trong .mạng-các tập tin.

Tạo một tập tin như thế này /etc/systemd/network/25-tun2socks.network với nội dung như sau:

[Match]
Name=tun2socks

[Network]
Address=172.16.1.2/24
Gateway=172.16.1.1
  • Name — tên của giao diện ảo mà bạn đã chỉ định trong netdev-tài liệu.
  • Address — Địa chỉ IP sẽ được gán cho giao diện ảo. Phải ở cùng mạng với địa chỉ bạn đã chỉ định trong dịch vụ tun2socks
  • Gateway — Địa chỉ IP của “bộ định tuyến” tun2socks, mà bạn đã chỉ định khi tạo dịch vụ systemd.

Vì vậy giao diện tun2socks có một địa chỉ 172.16.1.2, và dịch vụ tun2socks - 172.16.1.1, tức là nó là cổng cho tất cả các kết nối từ giao diện ảo.

Thiết lập điểm truy cập ảo

Cài đặt phụ thuộc:

apt install util-linux procps hostapd iw haveged

Tải xuống kho lưu trữ tạo_ap đến xe của bạn:

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

Chuyển đến thư mục kho lưu trữ trên máy của bạn:

cd create_ap

Cài đặt trên hệ thống:

make install

Một cấu hình sẽ xuất hiện trên hệ thống của bạn /etc/create_ap.conf. Dưới đây là các tùy chọn chỉnh sửa chính:

  • GATEWAY=10.0.0.1 — tốt hơn là biến nó thành một mạng con dành riêng riêng biệt.
  • NO_DNS=1 - vô hiệu hóa, vì tham số này sẽ được quản lý bởi giao diện ảo systemd-networkd.
  • NO_DNSMASQ=1 - tắt nó đi vì lý do tương tự.
  • WIFI_IFACE=wlp6s0 - Giao diện không dây của máy tính xách tay.
  • INTERNET_IFACE=tun2socks - giao diện ảo được tạo cho tun2socks.
  • SSID=hostapd — tên của điểm truy cập ảo.
  • PASSPHRASE=12345678 - mật khẩu.

Đừng quên kích hoạt dịch vụ:

systemctl enable create_ap

Kích hoạt máy chủ DHCP trong systemd-networkd

Dịch vụ create_ap khởi tạo một giao diện ảo trong hệ thống ap0. Về lý thuyết, dnsmasq bị treo trên giao diện này, nhưng tại sao phải cài đặt các dịch vụ bổ sung nếu systemd-networkd có máy chủ DHCP tích hợp?

Để kích hoạt nó, chúng tôi sẽ xác định cài đặt mạng cho điểm ảo. Để làm điều này, hãy tạo một tập tin /etc/systemd/network/25-ap0.network với nội dung như sau:

[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

Sau khi dịch vụ create_ap khởi tạo giao diện ảo ap0, systemd-networkd sẽ tự động gán cho nó một địa chỉ IP và kích hoạt máy chủ DHCP.

Dây EmitDNS=yes и DNS=10.0.0.1 truyền cài đặt máy chủ DNS tới các thiết bị được kết nối với điểm truy cập.

Nếu bạn không định sử dụng máy chủ DNS cục bộ - trong trường hợp của tôi đó là dnscrypt-proxy - bạn có thể cài đặt DNS=10.0.0.1 в DNS=192.168.1.1Đâu 192.168.1.1 — địa chỉ cổng ban đầu của bạn. Sau đó, các yêu cầu DNS cho máy chủ và mạng cục bộ của bạn sẽ không được mã hóa thông qua máy chủ của nhà cung cấp.

EmitNTP=yes и NTP=192.168.1.1 chuyển cài đặt NTP.

Điều tương tự cũng xảy ra với dòng NTP=10.0.0.1.

Cài đặt và cấu hình máy chủ NTP

Cài đặt trên hệ thống:

apt install ntp

Chỉnh sửa cấu hình /etc/ntp.conf. Nhận xét địa chỉ của các bể bơi tiêu chuẩn:

#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

Thêm địa chỉ máy chủ công cộng, ví dụ Google Public NTP:

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

Cung cấp quyền truy cập vào máy chủ cho các máy khách trên mạng của bạn:

restrict 10.0.0.0 mask 255.255.255.0

Cho phép phát sóng tới mạng của bạn:

broadcast 10.0.0.255

Cuối cùng, thêm địa chỉ của các máy chủ này vào bảng định tuyến tĩnh. Để thực hiện việc này, hãy mở tệp cấu hình giao diện không dây /etc/systemd/network/25-wlp6s0.network và thêm vào cuối phần 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

Bạn có thể tìm ra địa chỉ máy chủ NTP của mình bằng tiện ích host như sau:

host time1.google.com

Cài đặt dnscrypt-proxy, xóa quảng cáo và ẩn lưu lượng DNS khỏi nhà cung cấp của bạn

apt install dnscrypt-proxy

Để phục vụ các truy vấn DNS của máy chủ và mạng cục bộ, hãy chỉnh sửa ổ cắm /lib/systemd/system/dnscrypt-proxy.socket. Thay đổi các dòng sau:

ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

Khởi động lại systemd:

systemctl daemon-reload

Chỉnh sửa cấu hình /etc/dnscrypt-proxy/dnscrypt-proxy.toml:

server_names = ['adguard-dns']

Để định tuyến các kết nối dnscrypt-proxy thông qua tun2socks, hãy thêm vào bên dưới:

force_tcp = true

Chỉnh sửa cấu hình /etc/resolv.conf, thông báo cho máy chủ DNS về máy chủ.

nameserver 127.0.0.1
nameserver 192.168.1.1

Dòng đầu tiên cho phép sử dụng dnscrypt-proxy, dòng thứ hai sử dụng cổng ban đầu trong trường hợp máy chủ dnscrypt-proxy không khả dụng.

Xong!

Khởi động lại hoặc ngừng chạy các dịch vụ mạng:

systemctl stop networking NetworkManager NetworkManager-wait-online

Và khởi động lại tất cả những gì cần thiết:

systemctl restart systemd-networkd tun2socks create_ap dnscrypt-proxy ntp

Sau khi khởi động lại hoặc khởi động lại, bạn sẽ có điểm truy cập thứ hai định tuyến máy chủ và thiết bị LAN tới SOCKS.

Đây là kết quả đầu ra trông như thế này ip a máy tính xách tay thông thường:

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

Như một kết quả,

  1. Nhà cung cấp chỉ nhìn thấy kết nối được mã hóa tới máy chủ SOCKS của bạn, điều đó có nghĩa là họ không thấy gì.
  2. Tuy nhiên, nó vẫn thấy các yêu cầu NTP của bạn, để ngăn chặn điều này, hãy xóa các tuyến tĩnh cho máy chủ NTP. Tuy nhiên, không chắc chắn rằng máy chủ SOCKS của bạn có cho phép giao thức NTP hay không.

Nạng được phát hiện trên Debain 10

Nếu bạn cố gắng khởi động lại dịch vụ mạng từ bảng điều khiển, nó sẽ không thành công và báo lỗi. Điều này là do một phần của nó ở dạng giao diện ảo được gắn với dịch vụ tun2socks, có nghĩa là nó được sử dụng. Để khởi động lại dịch vụ mạng, trước tiên bạn phải dừng dịch vụ tun2socks. Nhưng tôi nghĩ, nếu bạn đọc đến cuối thì đây chắc chắn không phải là vấn đề với bạn!

tài liệu tham khảo

  1. Định tuyến tĩnh trên Linux - IBM
  2. systemd-networkd.service - Freedesktop.org
  3. Tun2socks · ambrop72/badvpn Wiki · GitHub
  4. oblique/create_ap: Tập lệnh này tạo Điểm truy cập WiFi NATed hoặc Bridged.
  5. dnscrypt-proxy 2 — Proxy DNS linh hoạt, hỗ trợ các giao thức DNS được mã hóa.

Nguồn: www.habr.com