یک VPN برای همه دیوایسها

در وضعیتی که دايم باید دنبال راه ارتباطی به بیرون این خراب شده (از عمد خراب شده) باشیم تا مگر مسیر فراری پیدا کنیم و سوراخ هر روز تنگ‌تر و تنگ‌تر می شود،‌جستجوی راههای بیرون رفتن و دور زدن بلک لیستی که حالا به وایت لیست بدل شده، یک جنگ دايم و کاملاً نابرابر است. حالا وسط این میدان جنگ هر روزه به نظر می رسد باید از همه ابزراهایی که لختی در حد چند ساعت از جستجوی سوراخ آسوده‌مان می‌کند، نهایت استفاده را ببریم. در ویديوی زیر مراحل اتصال به یک سرور رایگان SSTP از سایت VPNGATE آموزش داده می‌شود. از آنجا که در سایت VPNGATE پروتکلهای مختلفی پیشنهاد شده من اینجا سرورهای SSTP را هر روز جدا و بر اساس ping و سرعت مرتب می‌کنم تا برای استفاده راحتتر باشد. پس از وصل شدن به VPN می‌شود اتصال را از طریق hotspot WIFI برای دستگاههای اطراف از طریق ویندوزی که به VPN متصل است،‌به اشتراک گذاشت و از این طریق بسته به سرعت سرور می‌توان برای ۲ تا ۳ دستگاه اینترنت بدون سانسور را فراهم کرد.

از آنجا که سرورها در این سایت رایگان است و تهیه سرورها مانند Tor بر عهده داوطلبان است، علی‌رغم پروتکل امن، اتصال، چندان قابل اعتماد و بدون قطعی نیست در نتیجه پس از آن روشی آموزش داده می‌شود تا در صورت قطع شدن، VPN به صورت خودکار دوباره وصل شود.

لینک ویديو اگر لود نشد

  • مرحله وصل شدن به VPN:
    • رفتن به سایت https://www.vpngate.net/EN/ چون سایت فیلتر است می‌توانید از اینجا به سایت اصلی دسترسی داشته باشید یا مستقیم از اینجا به سرورهای SSTP تست شده دسترسی پیدا کنید.
    • حالا بعد از کپی کردن آدرس سرور -که در سایت اصلی به رنگ سبز و در ستون MS-SSTP آمده و در صفحه سرورهای تست شده در ستون sstp_link می‌توانید آنها را پیدا کنید.
    • در ویندوز با زدن دکمه پنجره و سرچ کردن vpn به vpn setting ویندوزبروید و Add a VPN connection را بزنید و
    • در پنجره باز شده به ترتیب مقادیر زیر را وارد می‌کنیم.
    • VPN provider : Windows(built-n)
    • connection name: نام دلخواه
    • Server name or address: سروری که کپی کرده‌ایم.
    • VPN type: Secure Socket Tunneling Protocol (SSTP)
    • در بخش Type of sign-in info: Username and password
    • Username: vpn
    • Password: vpn
    • دکمه save را می‌زنیم.
    • حالا در پنجره قبلی نام VPN تازه ساخته را پیدا می‌کنیم و روی آن کلیک می‌کنیم و دکمه connect را می‌زنیم تا مراحل کانکت شدن انجام شده و پایان یابد.
  • مرحله share کردن vpn ساخته شده و متصل.
    • دکمه پنجره+R را همزمان میفشاریم تا run باز شود.
    • توی پنجره run این دستور را وارد میکینم: ncpa.cpl
    • حالا در پنجره باز شده (Network Connections) میتوانیم درایوری با نام همان vpn که تازه ساختیم را پیدا کنیم.
    • حالا hotspot ویندوز را از از گوشه پایین سمت راست ویندوز روشن میکنیم.
    • حالا در پنجره Network Connections درایوری اضافه شده که همان درایور hotspot ماست. نام این درایور را به خاطر می‌سپاریم.
    • روی درایور VPN کلیک راست کرده و Properties را انتخاب می کنیم و به تب Sharing می رویم.
    • اینجا اول در بخش نوار بازشو وسط پنجره زیر Home network connections گزینه‌ای را که درایور هات اسپات را نشان می‌دهد انتخاب می‌کنیم ( این باید چیزی باشد شبیه Local Area Connection* 1 با شماره‌ای دیگر)
    • حالا تیک گزینه اول را می‌زنیم. یکسری پیام و هشدار ظاهر می‌شود که همه را یکی یکی OK میکنیم
    • و به این ترتیب VPN ما از طریق هات اسپات برای دستگاههایی که میتوانند به هات اسپات متصل شوند، وصل می‌شود.
  • مراحل اجرای Task در “Task Scheduler” ویندوز(از اینجا با کمی تغییر) :

۱- اتصال VPN را ایجاد کنید و نامی برای آن انتخاب کنید، مثلا “MyVPN”

۲- “Task Scheduler” را از منوی استارت باز کنید و روی “Create Task” کلیک کنید. (Option در سمت راست Task Scheduler قرار دارد)

۳- پنجره‌ای باز می‌شود که اطلاعات Task  را از شما می‌خواهد. اطلاعات را مثل شکل زیر پر کنید:

۵- در بالا از منوی کشویی “Begin The Task”، گزینه “On an Event” را انتخاب کنید
۴- بعد به تب Trigger بروید و روی “New” کلیک کنید. پنجره‌ای مثل بالا باز می‌شود:
۶- در منوی کشویی پایین، در “Log:” گزینه “Application” را انتخاب کنید، در “Source:” گزینه “RasClient” و در “EventID:” عدد ۲۰۲۲۶ را وارد کنید و OK کنید.
۷- دوباره روی “New” کلیک کنید و یک Trigger دیگر اضافه کنید. در بالا از منو “Begin The Task”، “On an Event” را انتخاب کنید. سپس در “Log:” گزینه “Microsoft-Windows-NetworkProfile/Operational” را انتخاب کنید. در “Source:” گزینه “NetworkProfile” و در “EventID:” عدد ۱۰۰۰۰ را وارد کنید و OK کنید.
۸- حالا دو Trigger برای Task اضافه شده است. برای سومی که مربوط می‌شود به این گزینه که بخواهید موقع بالا آمدن ویندوز به صورت اتوماتیک به VPN وصل شوید، باید یک Trigger دیگر مانند قبل اضافه کنید و این بار نوار کشویی بالا At startup را انتخاب میکنیم و تمام.
۹- حالا به تب “Action” بروید و روی “New” کلیک کنید. در “Action:” باید “Start a Program” انتخاب شده باشد. سپس در “Program/Script:” روی Browse کلیک کنید و فایل rasdial.exe را از پوشه System32 انتخاب کنید. حالا باید نام VPN و اطلاعات حساب کاربری را به ترتیب در “Add arguments” وارد کنید:
به این ترتیب: “نام VPN” نام کاربری[فاصله ]رمز عبور
و تمام. حالا هر وقت VPN قطع بشود یک صفحه شبیه صفحه CMD باز شده و تلاش میکند به vpn کانکت شود.

در نهایت اما اگر حوصله اینهمه کار را ندارید میتوانید از کد XML زیر استفاده کنید و فقط در این بخش

<Arguments>”MyVPN Name” user password</Arguments> جای “MyVPN Name” و user password مال خودتان را بنویسید.

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <URI>reconnect vpn</URI>
  </RegistrationInfo>
  <Triggers>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="Application"&gt;&lt;Select Path="Application"&gt;*[System[Provider[@Name='RasClient'] and EventID=20226]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
    </EventTrigger>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="Microsoft-Windows-NetworkProfile/Operational"&gt;&lt;Select Path="Microsoft-Windows-NetworkProfile/Operational"&gt;*[System[Provider[@Name='NetworkProfile'] and EventID=10000]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
    </EventTrigger>
  </Triggers>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\Windows\System32\rasdial.exe</Command>
      <Arguments>"MyVPN Name" user password</Arguments>
    </Exec>
  </Actions>
</Task>

این کد را میتوانید در بخشی که پایین نشان می‌دهم در Task Scheduler>import task ایمپورت کنید و تمام.

  • نکته دیگری که در ویدیو نیامده این است که وقتی vpn یکبار قطع و دوباره وصل می‌شود، vpn که در هات اسپات share کرده‌ایم درواقع از کار می‌افتد و هر چند هات اسپات وصل است اما دیتایی از این طریق منتقل نمی‌شود. برای حل این مشکل یا باید یکبار دستی همه تنظیمات آمده در ویدئو را انجام دهیم یا یکسره هات اسپات را یکبار قطع و دوباره وصل کنیم. اما غیر از اینها یک راه حل اتوماتیک هم وجود دارد که نحوه انجام دادن آن را نیز در زیر می‌آورم:

۱- کد پاورشل زیر را در یک فایل ریخته و بافرمت ps1 ذخیره می‌کنیم. یعنی درواقع یک ویرایشگر مثل notepad را باز میکنیم و کد زیر را توی آن کپی و پیست میکنیم و فایل را با پسوند .ps1 جایی ذخیره میکنیم.

#https://gist.github.com/datio/e78649083f238b779f0a68526c191dda
# https://stackoverflow.com/questions/45833873/enable-win10-inbuild-hotspot-by-cmd-batch-powershell/60444585#answer-60444585
[Windows.System.UserProfile.LockScreen,Windows.System.UserProfile,ContentType=WindowsRuntime] | Out-Null
Add-Type -AssemblyName System.Runtime.WindowsRuntime
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]
Function Await($WinRtTask, $ResultType) {
    $asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
    $netTask = $asTask.Invoke($null, @($WinRtTask))
    $netTask.Wait(-1) | Out-Null
    $netTask.Result
}
# https://stackoverflow.com/a/55563418
$connectionProfile = [Windows.Networking.Connectivity.NetworkInformation,Windows.Networking.Connectivity,ContentType=WindowsRuntime]::GetInternetConnectionProfile()
$tetheringManager = [Windows.Networking.NetworkOperators.NetworkOperatorTetheringManager,Windows.Networking.NetworkOperators,ContentType=WindowsRuntime]::CreateFromConnectionProfile($connectionProfile)
# Be sure to include Ben N.'s await for IAsyncOperation:
# https://superuser.com/questions/1341997/using-a-uwp-api-namespace-in-powershell
# Check whether Mobile Hotspot is enabled
$tetheringManager.TetheringOperationalState
# Stop Mobile Hotspot
Await ($tetheringManager.StopTetheringAsync())([Windows.Networking.NetworkOperators.NetworkOperatorTetheringOperationResult])
# Start Mobile Hotspot
Await ($tetheringManager.StartTetheringAsync())([Windows.Networking.NetworkOperators.NetworkOperatorTetheringOperationResult])

۲- یک فایل دیگر دوباره مثل notepad باز میکنیم و کد زیر را در آن کپی و پیست کرده و این فایل جدید را اینبار با پسوند .bat ذخیره می‌کنیم.

  • جای address\to\powershellfile\hotspot.ps1 را با آدرس فایل پاورشل که پیش از این درست کردید عوض کنید.
@echo off
PowerShell address\to\powershellfile\hotspot.ps1
pause

۳- حالا در Task Scheduler همان Task قبلی را باز می‌کنیم و در تب Action یک new باز میکنیم و در بخش Action: start a program را انتخاب میکنیم و در Program/Script  دکمه Browse را انتخاب میکنیم و در پنجره باز شده فایل .bat که ساختیم را انتخاب میکنیم و سپس open و سپس OK و دوباره OK و تمام.

حالا هر وقت VPN قطع شد، بلافاصله ریکانتکت شده و پس از آن هات اسپات هم یکبار خاموش و روشن می‌شود.