ライブラリはDotRasを使用しています。
開発環境はWindows 10 Pro 64bit + Visual Studio 2017 Communityです。
CodePlexは更新が終わっているのでdownload archiveでダウンロードした上で下記の順番で「6dda3a2b-7ea1-487b-ad75-34d3183bc10c」というファイルを解凍するとDotRas v1.3 SDK.msiを抽出できます。(自分は7-Zipを使いました)
- releases\
- 4\
- 6dda3a2b-7ea1-487b-ad75-34d3183bc10c
Imports System.Text
Imports System
Imports System.Net
Imports DotRas
Public Class Form1
Private Sub WriteSysRegDWORD(ByVal RegistoryKey As String, ByVal RegistoryComponent As String, ByVal RegistoryValue As Integer)
'DWORDでシステムレジストリ書き込み
Dim regkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(RegistoryKey)
Try
regkey.SetValue(RegistoryComponent, RegistoryValue)
regkey.Close()
Catch
MsgBox(Reflection.MethodBase.GetCurrentMethod.Name & ":レジストリ操作に失敗しました。")
End Try
End Sub
Private Sub CreateVPNEntry()
Dim l2tp_user As String
Dim l2tp_pass As String
Do While True
l2tp_user = InputBox("ユーザー名を入力してください。")
If l2tp_user = "" Then
MsgBox("ユーザー名は必須項目です。")
Exit Do
End If
l2tp_pass = InputBox("パスワードを入力してください。")
If l2tp_pass = "" Then
MsgBox("パスワードは必須項目です。")
Exit Do
End If
Try
RasPhoneBook1.Open()
'エントリが登録済みだった場合は削除する
'(消さないとCreateVpnEntryに失敗する)
If RasPhoneBook1.Entries.Contains("MyVPNConnection") = True Then
RasPhoneBook1.Entries.Clear()
End If
'VPNのエントリ作成
Dim entry As RasEntry = RasEntry.CreateVpnEntry(
"MyVPNConnection",
"123.456.789.012",
RasVpnStrategy.L2tpOnly,
RasDevice.GetDeviceByName("(L2TP)", RasDeviceType.Vpn, False)
)
With entry
'切断するまでの待ち時間(秒)
.IdleDisconnectSeconds = 600
'接続再試行回数
.RedialCount = 5
'接続再試行間隔(秒)
.RedialPause = 60
'LCP拡張を使う
'(ヤマハルーターは無効にしたほうが良い)
.Options.DisableLcpExtensions = False
'ソフトウェア圧縮を使用するかどうか
.Options.SoftwareCompression = True
'暗号化が必要
.EncryptionType = RasEncryptionType.Require
.Options.RequireEncryptedPassword = True
.Options.RequireDataEncryption = True
'マルチリンクの無効化
'特に使っていないので無効化する
.Options.DoNotNegotiateMultilink = False
'認証プロトコル設定する
.Options.RequireChap = True
.Options.RequireEap = False
.Options.RequirePap = False
.Options.RequireMSChap = False
.Options.RequireMSChap2 = False
.Options.RequireMSEncryptedPassword = False
.Options.RequireSpap = False
.Options.RequireWin95MSChap = False
'自動再接続を有効にする
.Options.ReconnectIfDropped = True
'事前共有鍵を使用する
.Options.UsePreSharedKey = True
'VPN先のゲートウェイをデフォルトゲートウェイとして使用しないようにする
'(VPN用ネットワークが閉域な場合、有効にするとVPN接続中にほかのサイトにつながらなくなる)
.Options.RemoteDefaultGateway = False
'資格情報を保存する
.Options.CacheCredentials = True
'VPNのエントリを登録する
RasPhoneBook1.Entries.Add(entry)
'登録したVPNエントリに対して事前共有鍵を登録する
.UpdateCredentials(RasPreSharedKey.Client, "pre_shared_key")
'登録したVPNエントリに対してユーザー名とパスワードを登録する
.UpdateCredentials(New NetworkCredential(l2tp_user, l2tp_pass))
End With
Button1.Enabled = False
MsgBox("登録が完了しました。")
Catch
MsgBox("登録に失敗しました。")
End Try
Exit Do
Loop
End Sub
Private Sub AddRegEntry()
'IPSec NAT-Tを有効にするレジストリ設定(要再起動)
'Windowsではデフォルトで無効になっているため
WriteSysRegDWORD("SYSTEM\CurrentControlSet\Services\PolicyAgent", "AssumeUDPEncapsulationContextOnSendRule", 2)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'VPNの接続作成
CreateVPNEntry()
'レジストリの設定
AddRegEntry()
End Sub
End Class