OpenVPNルーティングコマンド全般

OpenVPNルーティングコマンド全般

以下のような状況です: 1- OpenVPN サーバーが 2 台あります (サーバー A とサーバー B)。

2- クライアントは直接 LAN ではなく、VPN 経由で各サーバーに接続します。

3- サーバー B が VPN クライアントとしてサーバー A に接続されます。

4- サーバーBは2つのOpenVPNインスタンスを実行します

5- Asuume ラップトップ B は VPN 経由でサーバー B に接続されており、少なくともサーバー A に到達する必要があります。

6- サーバーAのVPN DHCPは10.8.0.0/24です

7- サーバーBのVPN DHCPは172.30.0.0/16です

8- サーバー B には静的 IP 10.8.0.101 があります (VPN クライアント)

  • 問題は、ラップトップ B からサーバー A にアクセスできないことです。また、サーバー A はクライアント IP ではなく、VPN サーバー IP でサーバー B にアクセスできません。

ネットワーク構造(イメージ)

ネットワーク構成は次のとおりです。

サーバーAの構成

    [root@localhost ~]# ifconfig
eth0      inet addr:X.X.X.X  Bcast:X.X.X.255  Mask:255.255.255.0


eth0:0    inet addr:X.X.X.X  Bcast:X.X.255.255  Mask:255.255.0.0


lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0


tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:629066 errors:0 dropped:0 overruns:0 frame:0
          TX packets:416252 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:136006302 (129.7 MiB)  TX bytes:114377768 (109.0 MiB)

サーバーB

    [root@vps8887 ~]# ifconfig
eth0      inet addr:X.X.X.X  Bcast:X.X.X.255  Mask:255.255.255.0

eth0:0    inet addr:X.X.X.X  Bcast:X.X.X.255  Mask:255.255.255.0

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0


tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:172.30.0.1  P-t-P:172.30.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:69 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:4140 (4.0 KiB)  TX bytes:240 (240.0 b)

tun1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.101  P-t-P:10.8.0.102  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:34 errors:0 dropped:0 overruns:0 frame:0
          TX packets:105 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:2856 (2.7 KiB)  TX bytes:8820 (8.6 KiB)

サーバーAのルーティング:

[root@localhost ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.8.0.2        *               255.255.255.255 UH        0 0          0 tun0
10.8.0.0        10.8.0.2        255.255.255.0   UG        0 0          0 tun0
192.168.1.0     *               255.255.255.0   U         0 0          0 eth0
172.16.0.0      *               255.255.0.0     U         0 0          0 eth0
169.254.0.0     *               255.255.0.0     U         0 0          0 eth0
default         192.168.1.1     0.0.0.0         UG        0 0          0 eth0

サーバー B のルーティング:

 [root@vps8887 ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.8.0.102      *               255.255.255.255 UH        0 0          0 tun1
172.30.0.2      *               255.255.255.255 UH        0 0          0 tun0
X.X.X.0    *               255.255.255.0   U         0 0          0 eth0
10.8.0.0        10.8.0.101      255.255.255.0   UG        0 0          0 tun1
X.X.X.0   *               255.255.255.0   U         0 0          0 eth0
172.30.0.0      172.30.0.2      255.255.0.0     UG        0 0          0 tun0
link-local      *               255.255.0.0     U         0 0          0 eth0
default         X.X.X.1    0.0.0.0         UG        0 0          0 eth0
default         X.X.X.1   0.0.0.0         UG        0 0          0 eth0

次のコマンドを追加して、サーバー A にルーティングを追加しようとすると、問題が発生します。

route add -net 172.30.0.0/16 gw 10.8.0.101

次のエラーが表示されます:

「SIOCADDRT: ネットワークに到達できません」

サーバーAのポート1194のOpenVPN構成

proto udp

dev tun

ca ca.crt

cert server.crt

key server.key

dh dh1024.pem

client-to-client

duplicate-cn

server 10.8.0.0 255.255.255.0

client-config-dir ccd

push "dhcp-option DNS 10.8.0.1"

status openvpn-status.log

keepalive 10 120

comp-lzo

persist-key

persist-tun

crl-verify /etc/openvpn/crl.pem

verb 3

================ Server B Client ccd ================
push "dhcp-option DNS 8.8.8.8"

ifconfig-push 10.8.0.101 10.8.0.102

=====================================================

サーバー B の OpenVPN 構成

======================= Server B ( Server Config )======================== 

port 1194

proto udp 

dev tun

ca ca.crt

cert server.crt

key server.key

dh dh2048.pem

client-to-client

duplicate-cn

server 172.30.0.0 255.255.0.0

push " route 10.8.0.0 255.255.255.0 "

status openvpn-status.log

keepalive 10 120

comp-lzo

persist-key

persist-tun

verb 3

==============================================================================

================= Server B ( Client Config )==============================

client

dev tun

proto udp

remote serverA 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert client.crt

key client.key

route-nopull

route 10.8.0.0 255.255.255.0 10.8.0.101

comp-lzo

verb 5

===============================================================================

最後に:これらのサイトが相互に通信する必要があります。

答え1

OpenVPNルーティングコマンド全般

ルート

このrouteコマンドはサーバー設定に含まれ、サーバーに独自のカーネル ルーティング テーブルにルートを追加するように指示します。routeディレクティブにサブネットのコマンドを追加する必要はありませserverんが、サーバーが処理する他のすべてのサブネットのコマンドを追加する必要がありますroute。基本的に、これはカーネルにこれらのサブネットを openvpn サーバーに送信するように指示します。例:

# serverA.conf (just a fragment)
server 10.8.0.0 255.255.255.0
...
route 172.30.0.0 255.255.255.0 # Add a route to the kernel routing table

イルート

このirouteコマンドは、OpenVPNの「内部」ルートを作成し、OpenVPNサーバーがどのクライアントがサブネットを担当しているかを認識できるようにします。ここそしてここパケットがカーネル ルーティング テーブルに到達する前に、openvpn は tun/tap デバイスから入ってくるパケットを復号化し、パケットを検査してどう処理するかを判断します。iroute コマンドがないと、サーバーはパケットを認識しません。

# ccd/ServerB.conf
iroute 172.30.0.0

「ルート...」をプッシュします

このpushコマンドは他の用途にも使用されますが、ルーティングにpushはサブネットからクライアントへのルートが必要です。これにより、クライアントはカーネル ルーティング テーブルを変更してトラフィックを VPN サーバーに送信するように指示されます。これがないと、クライアントはプライベート サブネット 10.8.0.0 から 172.30.0.0 へのパケットを取得する方法がわかりません。これらは、ccd/client に配置するか、すべてのクライアントに共通である場合はサーバー構成に配置する必要があります。

# ServerA.conf (more of the fragment)
server 10.8.0.0 255.255255.0
...
route 172.30.0.0 255.255.255.0 # add the route to the server's kernel
push "route 172.30.0.0 255.255.255.0" # add the route to the clients

クライアント対クライアント

このclient-to-clientコマンドは、クライアントが相互に通信できることをサーバーに伝えます。これはデフォルトでコメント化されており、必要になると思います。

カーネル IP 転送

これはOpenVPNの設定ではなく、Linuxに特有のものです。ただし、これはOpenVPNサーバーを運用する人にとっては重要です。各サーバーはカーネル内でIP転送を有効にする必要があります。これまた、ファイアウォール ルールによって転送が妨げられていないことを確認してください。

設定に関して

ディレクティブが不足しているようですiroute。サーバー B の ccd ファイルにエントリが必要です。このirouteコマンドは、どのクライアントがそのサブネットを認識しているかを openvpn サーバーに伝えます。

# ccd/ServerB
iroute 172.30.0.0 255.255.255.0

編集: もう一度見てみると、もう一つ気づいたことがあります。

また、サーバー A はサーバー B へのルートをクライアントにプッシュしていないようです。

# ServerA config
push " route 172.30.0.0 255.255.255.0 "

私は、openvpn を実行している 2 台のサーバーでこれを行います。どのマシンにも手動でルートを追加する必要はありません。openvpn の設定が正しければ、サーバー B はサーバー A に 172.30.0.0 を で処理することを伝えますiroute。サーバー A は、 で 172.30.0.0 をサーバー A 経由で送信するようにクライアントに伝えますpush " route ... "。そして、サーバー B はすでに 10.8.0.0 のルートをプッシュしています。

pingこれが機能するかどうかをテストするには、ルートを追加しないことをお勧めします。

答え2

自分で解決しました。重要な点として、「ipforwarding」が両側で有効になっていませんでした。これが大きな問題です。iroute は私には理解できません。この記事を見ました: OpenVPN と iroute ルーティングはすべて OpenVPN によって行われます。手動でルーティングする必要はありません。以下に示すように:

構造とソリューション

最後に、助けてくれたDanger Gingerに感謝します。

関連情報