OpenVPN және SOCKS5: нұсқаны, тасымалды және DNS-ті сәйкестендіру
SOCKS тізбегі прокси нұсқасы, тасымал немесе DNS жолы сәйкеспегенде істен шығады. SOCKS5-ті сәйкестендіріңіз, TCP тасымалдаңыз және тізбекті бір аттар кеңістігінде ұстаңыз.
Бұл жұмыс станциясынан шығатын бір жол — SOCKS проксиі, ал оның артындағы OpenVPN пайдалы ешбір мәліметсіз қосылым уақытының біткенін хабарлайды. Сол машинадағы браузер сол прокси арқылы жұмыс істейді, тіркелгі деректері дұрыс, порт жауап береді. Үш нәрсе бірінші тексеруге жеткілікті жиі ерекшеленеді: прокси сөйлейтін SOCKS нұсқасы, клиент таңдаған тасымал және атауды шешу жүретін орын. Қорғаныс қабырғасын кінәламас бұрын әрқайсысын растаңыз.
Қорғаныс қабырғасынан бұрын SOCKS нұсқасын сәйкестендіріңіз
Қауымдастық OpenVPN socks-proxy үшін SOCKS5 сөйлейді. Оны тек SOCKS4 ұсынатын проксиге бағыттасаңыз, TCP қосылымы ашылып, содан кейін тұрып қалады, өйткені клиент екінші жақ ешқашан талдамайтын сәлемдесуге жауап күтеді. Сырттан бұл тоқырау дәл сүзілген порт сияқты көрінеді, сондықтан нұсқа туралы сұрақ кез келген қорғаныс қабырғасы ережесінен бұрын тұрады. SOCKS-ті білетін бір тарту мұны бір командамен шешеді.
curl --socks5-hostname 127.0.0.1:9050 gw.lab.example
Аяқталған сұраныс бірден екі нәрсені дәлелдейді: прокси SOCKS сұранысын қабылдады және атауды шешті. URL схемасы қажет емес, өйткені curl жалаң хостты HTTP деп санайды, бұл осы сынаққа жеткілікті.
Бұл тарту клиент журналы жасыратын ақауды да жоққа шығарады. Прокси браузерге рұқсат беріп, соған қарамастан VPN межесінен бас тарта алады, онда бас тарту CONNECT кезеңінде, кез келген VPN аутентификациясынан бұрын болады. OpenVPN тек уақыт біткенін хабарлайды, сондықтан проксидің өз жауабы — сізге қажет дәлел.
Тасымал екі жақта да TCP болуы керек
Мұнда SOCKS5 TCP ағынын тасымалдайды, сондықтан туннельдің өзіне proto tcp-client керек. Әлі UDP-де тұрған профиль бұл жолмен жұмыс істемейді, өйткені клиент протоколдың UDP бірлестік режимін пайдаланбайды. Профильді аудару — бұл формальдылық емес, нақты өзгеріс: алыс жақ сол портта TCP тыңдауы керек. Содан кейін жүктеме TCP ішіндегі TCP болады, онда жоғалған сегмент екі рет қайта жіберіледі және қарқын нашарлайды, мұны интерактивті сессиялар үлкен тасымалдардан әлдеқайда көп сезеді.
proto tcp-client
remote gw.lab.example 8443
socks-proxy 127.0.0.1 9050
Бұл директива прокси хостты, міндетті емес портты және міндетті емес тіркелгі деректері файлын қабылдайды. Оларды профильдің өзіне қойыңыз, сонда басқа жердегі көшірме дәл солай әрекет етеді.
Бүкіл тізбекті бір контейнерге қамаңыз
Тізбекті хостта жасау — оның әдепкі маршрутын басып алып, шешушіні кейін ешкім түсіндіре алмайтын күйде қалдыру. Оның орнына аттар кеңістігі немесе контейнер оны шектейді, сондықтан хост өз жолын сақтайды, ал SOCKS қадамы мен туннель бірге тұрады. Ішінде туннель құрылғысы, оны конфигурациялау құқығы және қолжетімді прокси жоқ болса, ештеңе көтерілмейді. Compose қызметі мұны cap_add: NET_ADMIN және bind-бекітілген /dev/net/tun арқылы алады.
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
Бұл жұп контейнерді привилегиялық режимде іске қосудан тар және құрылғыға қажетті қатынаудың бәрі осы. Tor клиенті немесе бөлек прокси контейнері тыңдаушыны бере алады. Екі жағдайда да оны loopback-ке байлап, проксиді желіге шығарудың орнына аттар кеңістігінен хост арқылы оған жетіңіз.
Атауды шешу — оқшаулау істен шығатын орын
Пакеттерді тасымалдай отырып, хосттың шешушісінен сұрайтын туннель ештеңені оқшаулаған жоқ. Екі нәрсе оқшаулауды шынайы етеді: аттар кеңістігінің өз шешушісі болуы және оның сұраулары прокси немесе туннель арқылы жүруі, ешқашан физикалық интерфейс арқылы жүрмеуі. Сынақ үшін екі ат қолданыңыз: біреуі туннельдің артында ғана бар, екіншісі сол жолмен жүруі тиіс жалпы ат.
docker compose exec vpn cat /etc/resolv.conf
docker compose exec vpn getent hosts internal.lab.example
Егер алыс ат шешіліп, жалпы ат шешілмесе, тізбек бұзылған емес, таңдамалы, және айырма әр сұраудың қай жолмен жүргенін айтады. Екеуі де хосттан шешіліп, контейнер ішінде ешқайсысы шешілмесе, контейнер әлі де хосттың шешушісін қарызға алады. Табылған шешуші файлын жазып алыңыз, өйткені өзгерту керек параметр — сол.
Әр қадамды ретімен дәлелдеңіз
Тізім қысқа. SOCKS5 сұранысы жауап алады, туннель прокси арқылы өз тыңдаушысына жетеді, ал аттар кеңістігінен шыққан пакеттер алыс жақ күтетін мекенжайды тасиды. Қосымша конфигурация үстеудің орнына әрқайсысын бөлек растаңыз. Клиент қосылды деп, бірақ ештеңе қозғалмаса, үзіліс әрдайым дерлік екінші немесе үшінші фактіде болады.
curl --socks5-hostname 127.0.0.1:9050 gw.lab.example
docker compose exec vpn ip route get 203.0.113.10
docker compose exec vpn getent hosts internal.lab.example
Істеген комбинацияны жазыңыз: SOCKS нұсқасы, тасымал, шешуші және аттар кеңістігінің параметрлері. Бұл тізбекті екінші рет есте сақтаудан шешу жазбадан қымбат. Сол төрт фактіні билетте ұстаңыз, чат ағынында емес.
Қосылды деп хабарлап, ештеңе өткізбейтін тізбек әдетте сіз әлі дәлелдемеген қадамда істен шыққан. Келесі қабатты қоспас бұрын сол қадамды сынап көріңіз.