Бір тұтынушы желісіне жету үшін екінші VPN клиентін орнату — бұл істің әдеттегі басталу жолы, және екі клиент те сәттілік туралы хабарлағанда бірінші туннель қараңғы болады. Әр клиент әдепкі маршрут орнатты, екіншісі нақтырақ еді, және ядро енді бірінші туннельдің өз сыртқы қосылысынан басқаның бәрі үшін соны ұстанады. Ештеңе құлаған жоқ және ешбір профиль қате емес. Бір маршрут екіншісін алмастырды, ал шешім — қай туннель әдепкі маршрутқа ие болуы керегін шешу.

Белгі: екінші клиент тыныш жеңеді

OpenVPN: redirect-gateway def1 опциясы 0.0.0.0/0 мекенжайын қайта жазбайды. Ол 0.0.0.0/1 және 128.0.0.0/1 қосады: екеуі бірге барлық IPv4 мекенжайын қамтиды, және әр префикс ұзындығы бойынша қарапайым әдепкіден басым. Бастапқы әдепкі кестеде қалады және қарапайым трафик үшін қолданылудан қалады, ал VPN серверіне хост-маршрут туннельдің өз сыртқы пакеттерін ұстауына жол бермейді. Екі клиент те осылай істейді, ал екіншісі жай ғана өз жұбын кейінірек орнатады.

Сондықтан бірінші туннель үзілген емес, өлі көрінеді. Оның интерфейсі көтерілген, басқару арнасы тірі, және ешбір қолданба трафигі оған енді жетпейді. Кері шағым да сол жетіспейтін push-тан туындайды: қосылатын, бірақ ештеңе жібермейтін телефон әдетте redirect-gateway туралы ешқашан жарияламаған сервермен сөйлеседі, сондықтан құрылғы өз әдепкісін сақтайды және тек пулға жетеді.

Екінші клиент қосылғанға дейін және кейін маршрут суретін түсіріңіз. Кестеде пайда болатын екі жарты маршрут — бүкіл өзгеріс, және олар екі шағымды да түсіндіреді. Белгінің пайда болуы үшін кестедегі басқа ештеңе қозғалмауы керек. Сондықтан екінші клиентті алып тастау біріншісін бірден қалпына келтіреді.

Қай туннель шын мәнінде жеңетінін оқыңыз

Жеңімпазды клиенттердің іске қосылу ретінен немесе жүйелік науа белгішесінен шығармаңыз. Ядродан екі жеке желіден тыс межелі орын үшін қай маршрутты қолданатынын сұрап, қайтарылған интерфейсті оқыңыз.

ip route show
ip route get 198.51.100.24
route print -4
Find-NetRoute -RemoteIPAddress 198.51.100.24

Алғашқы екеуі — Linux жауабы, соңғы екеуі — Windows баламасы. Оларды екі туннель де көтерілген кезде іске қосыңыз, содан кейін біреуін ажыратып, қайта іске қосыңыз. Екі шығыс арасындағы айырма — шешім таңдаудан бұрын қажет факт, және ол кез келген клиенттің журналын оқуға қарағанда аз уақыт алады.

Нәтижені жазып алыңыз, оның ішінде интерфейс атауы мен сәйкес келген префикс. Екінші VPN біріншісін бұзды деген билет — белгінің сипаттамасы, ешкім әрекет ете алатын маршруттық мәлімдеме емес. Іздеу оны келесі инженер бір командамен қайталай алатын фактіге айналдырады.

Windows: бір профильге әдепкіге ие болуға жол бермеңіз

Windows сақталған профильдерді ұстайды, ал кірістірілген клиент бірінің екіншісіне тәуелді болуына мүмкіндік береді, сондықтан екіншісі қосылғанда біріншісі автоматты түрде көтеріледі. Соңғы қосылған профиль әдепкіні ұстауға бейім, сондықтан практикалық иесі — бірінші емес, соңғы қосылым. Әр профильге өз push маршруттарын беріңіз және әдепкіге ие болмауы керек профиль үшін бөлінген туннельді қосыңыз.

Set-VpnConnection -Name "Contoso" -SplitTunneling $true
rasdial Contoso

Бөлінген туннель мұны өзгертеді: кестеге тек сервер итерген префикстер түседі, бұл әдепкіні бірінші туннельде қалдырады. Егер екі сервер де әдепкі маршрутты итерсе, дизайн бәрібір сәтсіз болады, өйткені онда соңғы қосылым жеңеді және клиент жағындағы ешбір параметр мұны өзгертпейді. Сервер жағындағы push-ты түзетіңіз немесе бір иесін қабылдаңыз.

Қолданба арқылы іске қосылатын профильдер — басқа мүмкіндік және білуге тұрарлық: Windows профилі аталған орындалатын файл іске қосылғанда басталуы мүмкін, ал трафик сүзгілері оның не таситынын шешеді. Бұл firewall ережесі емес, профиль параметрі, және әдепкі маршрут қақтығысынан өзге мәселені шешеді.

Linux: екінші туннельді негізгі кестеден тыс ұстаңыз

Бір машинада openvpn --config екі данасын іске қосу екі клиентті бір кестеге салады, ал үш нұсқа оларды өсіп келе жатқан оқшаулаумен бөледі. Ең жеңілі — екінші клиентке кестені мүлдем өңдеуге тыйым салу: айқын маршруттармен route-nopull, немесе тек ниетіңіздегіні орнататын route-up скрипті. Сонда екінші туннель дәл атаған префикстерді тасиды және басқа ештеңені. Сонда қай префикстің қайда баратынын кейін ашу орнына өзіңіз шешесіз.

Саясаттық маршруттау — ортаңғы нұсқа. Ереже бір бастау мекенжайы немесе firewall белгісі үшін бөлек кесте таңдайды, және сол кесте екінші туннельдің маршруттарын тасиды. Кері жол сүзгілеу осында тұзақ, өйткені кесте таңдайтын интерфейстен өзге интерфейске келген жауап тасталады, сондықтан туннель бұзылды деп қорытынды жасамас бұрын rp_filter параметрін тексеріңіз.

ip rule add from 10.44.7.0/24 table 100
ip route add default dev tun1 table 100
sysctl net.ipv4.conf.all.rp_filter

Желілік ат кеңістіктері — ең ауыр және ең таза нұсқа. Екінші клиентті ip netns ішінде іске қосыңыз, оған veth жұбын беріңіз және пайдалану үшін сол ат кеңістігіне кіріңіз. Кедергі жоғалады, өйткені әр ат кеңістігі бір кестені бөлісу орнына өз кестелеріне ие, бұл екі туннель апталар бойы көтерілуі керек болғанда қосымша баптауға тұрарлық.

Қолданба бойынша, және тізбектеу жеке мәселе ретінде

Кейде екінші туннельді тек бір бағдарлама пайдалануы керек. Linux-те пайдаланушы, cgroup немесе порт бойынша саясаттық маршруттау осы нәтижеге жетеді, және бір межелі орынды әдепкіге мүлдем тимей интерфейске бекітуге болады. Сокетін бір интерфейске бекіткен қолданба маршрут кестесіне мүлдем жүгінбейді, сондықтан іске қосқыш өз баптауларында мекенжай таңдалғанша физикалық адаптерді пайдалана бере алады.

Тізбектеу — екі туннельді қатар іске қосудан өзге операция. A-ны B үстінен тізбектеу ішкі сервердің мекенжайы сыртқы туннель ішінен қолжетімді болуы керек дегенді білдіреді. Сыртқы клиент те ішкі клиенттің шифрланған пакеттерін ағып кету деп ойламауы керек. Виртуалды машина ішіндегі бір клиент — дөрекі, бірақ сенімді нұсқа; екеуі бір хостта болса, жоғарыдағы маршруттау жұмысы мен ішкі серверге қарай ешқашан ішкі туннельге кірмейтін сыртқы жол қажет.

Әдепкінің иесін, әр туннель таситын префикстер тізімін және DNS жолын жазып алыңыз. Осы үш факт келесі оқиғаны тергеу емес, іздеуге айналдырады.

Қатысты мақалалар