OpenVPNを使用してpingを削減した方法

こんにちは、%ユーザー名%。 それはすべて、真夜中のスカイプコールから始まりました。 一番下の行は、「義理、私はゲームで高いpingを持っています、助けて」です。 そして、私は手伝うことにしました。 ヘルプツールはOpenVPNになりました 。 カットの下には、多くのテキスト、いくつかの設定、および問題の本質の説明があります。 同様のマニュアルはすでに多数ありますが、いくつかの落とし穴が記載されていないため、このマニュアルを作成する機会となりました。



そのため、pingが高いという問題は、ウクライナのプロバイダーUkrTelecomのすべての顧客に関連しています(プロバイダーを変更することは、合理的な価格で代替手段がない民間セクターのため、問題を解決するオプションではないことにすぐに注意します)。 ハリコフからモスクワまで、pingは100ミリ秒以上かかります。 トレースの結果によれば、通信がドイツまたはスイスのいずれかを通過しており、約50ミリ秒の損失があったことが明らかでした。 うーん、私は考えて、これを修正することにしました。 プロバイダーへの手紙や電話では何も得られず、答えは「ルートを変更することはできません」でした。 さて、私たちのものは消えませんでした?! 解決済み:キエフのOpenVPNサーバー(直接接続)とモスクワへの直接ルート。 今後、pingが100〜120ミリ秒から50〜60ミリ秒に2倍に減少したことをお知らせします。



チャレンジ





すべての設定は、サーバー側のUbuntu 11.04とクライアントのWindows 7に関連しています。

そのため、まず、VDSまたはVPSサーバーテスト用のアプリケーションを作成します。 判明したように、UbuntuカーネルのtunモジュールがVDSまたはVPSで有効になっているかどうかをすぐにテクニカルサポートに確認することをお勧めします。 そして、サポートから私に言われたように、最初のサーバーには「OpenVZテクノロジーの限界」があったため、2番目のサーバーをゼロから設定する必要がありました。 マニュアルにはこのニュアンスはありませんでしたが。 その結果、4時間(テストサーバーのアプリケーションの確認待ちが2、設定が1つ、「動作しない理由」が1つ)。



サーバー



Ubuntuを実行しているサーバーのセットアップの基本は書いていません。この種のことは既にネットワークで行われています。 したがって、すぐにポイントに。

開始するには、OpenVPN自体をインストールします。

apt-get install openvpn
      
      





その後、サーバーとクライアントの証明書の作成を開始します。

 cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
      
      





変数を変更できます(原則的には必要ありません)

 vi ./vars #   export KEY_SIZE=1024 # ,  -,      ,     export KEY_EXPIRE=3650 #     . ,  10      #      set KEY_COUNTRY=UA set KEY_PROVINCE=KH set KEY_CITY=Kharkov set KEY_ORG=Zadrot`s_Home set KEY_EMAIL=mail@host.domain #         ,   ,          (  ,    … ) KEY_CONFIG=***.cnf
      
      





次に、いくつかの証明書を生成します。 証明書を生成したくない場合はすぐに警告します。このディレクトリのKEY_CONFIGパラメーターで指定された名前のファイルがあるかどうかを確認してください。 そして、私のパラメータに「openssl.cnf」が書き込まれ、ディレクトリには「openssl-0-9-0.cnf」、「openssl-1.0.0-old.cnf」などのファイルがいくつかありました。 「openssl-1.0.0.cnf」を「openssl.cnf」に変更して名前を変更したところ、見事に機能しました。

  ./build-ca ./build-key-server server ./build-dh #    /etc/openvpn/ mv ./keys/ca.crt /etc/openvpn mv ./keys/server.crt /etc/openvpn mv ./keys/server.key /etc/openvpn mv ./keys/dh1024.pem /etc/openvpn #      ./build-key-pkcs12 gamer # gamer    ,   Export password,    
      
      







サーバー自体の使用を開始する

 #    ““  cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ gzip –d server.conf.gz #      Vi server.conf #      local _ip_ push "redirect-gateway def1 bypass-dhcp" #        ,     #   dns ,      (    Windows ,        ,       ) push "dhcp-option DNS *.*.*.*" push "dhcp-option DNS *.*.*.*" verb 6 #        ,   .       #      - ,      -  auth-user-pass-verify /etc/openvpn/verify.sh via-file #       #client-cert-not-required # ,      -,    username-as-common-name # ,      - tmp-dir /etc/openvpn/tmp #       “mkdir tmp” script-security 2
      
      







次に、ログインとパスワードの検証を実行するverify.shスクリプトを作成します。

ネタバレスクリプトテキスト

verify.sh
 #!/bin/sh ## format: username:password username:password ... ## you can even have same usernames with different passwords # USERS='user1:pass1 user2:pass2 user3:pass3' ## you could put username:password in ## a separate file and read it like this USERS=`cat /etc/openvpn/user.pass` vpn_verify() { if [ ! $1 ] || [ ! $2 ]; then #echo "No username or password: $*" exit 1 fi ## it can also be done with grep or sed for i in $USERS; do if [ "$i" = "$1:$2" ]; then ## you can add here logging of users ## if you have enough space for log file #echo `date` $1:$2 >> your_log_file exit 0 fi done } if [ ! $1 ] || [ ! -e $1 ]; then #echo "No file" exit 1 fi ## $1 is file name which contains ## passed username and password vpn_verify `cat $1` #echo "No user with this password found" exit 1
      
      





そして実行可能にします:chmod + x verify.sh

「user1:pass1 user2:pass2 etc.」という形式でスペースを含むuser.passファイルを作成します。





最後のコードはNATを設定し、自動実行に追加することです

 vi /etc/sysctl.conf net.ipv4.ip_forward=1 #   vi /etc/rc.local #  : iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE #   ,  ifconfig
      
      





さて、サーバーの準備ができました。サーバーを再起動して、クライアントを構成できます。



お客様



まず、OpenVPN for Winをインストールします。 「サービス」(別名「テスト」)のエンドユーザーはコンピューターコンピューティングの分野にあまり精通していないため、ショートカットの設定に「管理者として実行」を配置し、毎回RMBをクリックしないようにします(そうでない場合、ルートは登録されません)

サーバーからSSHまたはFTP経由でファイルをプルします。

 /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ca.crt /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/gamer.crt /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/gamer.csr /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/gamer.key /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/gamer.p12
      
      





そしてそれらをにコピーします

 %ProgramFiles%\OpenVPN\config
      
      





同じ場所で、次の内容のプレーンテキストのconfig.ovpnファイルを作成します。

 # 123123 Client #      dev tun proto udp remote *.*.*.* 1194 # ip    ( ) resolv-retry infinite nobind persist-key persist-tun ca ca.crt #   cert client.crt #   key client.key #   comp-lzo verb 3 remote-cert-tls server pull route 109.105.0.0 255.255.0.0 #     ,   ,      OpenVPN,     auth-user-pass #     -,   
      
      







さて、すべての準備が整ったので、サーバーを再起動し、クライアントトレイのOpenVPNアイコンおよび対応する「接続」項目を介してサーバーへの接続を試みます。 証明書のパスワード、ログイン、パスワード、および出来上がりを入力します。







サーバーに接続する前後に確認してください。

だった
32バイトのデータを含むpointblank.ru [109.105.130.101]とのパケット交換:

109.105.130.101からの返信:バイト= 32時間= 107ms TTL = 245

109.105.130.101からの返信:バイト= 32時間= 111ms TTL = 245

109.105.130.101からの返信:バイト= 32時間= 104ms TTL = 245

109.105.130.101からの返信:バイト= 32時間= 108ms TTL = 245



109.105.130.101のping統計:

パケット:送信= 4、受信= 4、損失= 0

(0%の損失)

ミリ秒単位の概算の受信/送信時間:

最小= 104 ms、最大= 111 ms、平均= 107 ms





になっています
32バイトのデータを含むpointblank.ru [109.105.130.101]とのパケット交換:

109.105.130.101からの返信:バイト= 32時間= 55ms TTL = 248

109.105.130.101からの返信:バイト= 32時間= 55ms TTL = 248

109.105.130.101からの返信:バイト= 32時間= 58ms TTL = 248

109.105.130.101からの返信:バイト= 32時間= 55ms TTL = 248



109.105.130.101のping統計:

パケット:送信= 4、受信= 4、損失= 0

(0%の損失)

ミリ秒単位の概算の受信/送信時間:

最小= 55ms、最大= 58ms、平均= 55ms





pingは107ミリ秒から55ミリ秒に減少しました。



まとめ





私たちが得たもの





使用済み





結論 :誰もが幸せであり、すべてが1週間も失敗することなく2週間機能しています。



PS:この投稿で私が犯した間違い(文法的およびその他すべて)を指摘してください。



UPDpsyXが述べたように、同じ証明書を持つクライアントを同時に接続する機能を追加するには、server.confファイルに次の行を追加する必要があります。
  duplicate-cn
      
      





<



All Articles