ネットワークトポロジは次のとおりです。
OpenVPNサーバー:
Private IP (eth0): 10.0.4.23/16
Public IP (eth1): 77.20.30.40/24
Routes:
default via 77.20.30.1
10.0.0.0/16 (not routable, so no gateway)
10.8.0.0/16 via 10.0.0.65
同じプライベートサブネット上の10.0.13.0/24ネットワーク範囲のプライベートアドレスでOpenVPN経由で接続するクライアントを提供します。したがって、クライアントはOpenVPNサーバーアドレス10.0.13.1をゲートウェイと見なします。
クライアントシステム:
Public IP: 217.40.50.60
現在、クライアントがVPNサーバーに接続すると、プライベートスコープ内のサブネットを見ることはできません。そのため、OpenVPN サーバー tun0 IP (10.0.13.1) を使用してこれらのネットワークにパスを追加しました。
ip r add 10.0.0.0/16 via 10.0.13.1
ip r add 10.8.0.0/16 via 10.0.13.1
これはうまくいきません。そのため、OpenVPNサーバーにPOSTROUTING iptablesルールを追加しました。
iptables -A POSTROUTING -s 10.0.13.0/24 -o eth0 -j MASQUERADE
その時は効果がありました。ただし、問題は、たとえば、そのプライベートサブネット上のサーバーに接続すると、サーバーが元の10.0.4.20
IPアドレスをOpenVPNプライベートアドレスとして扱うことです10.0.4.23
。
現在、私たちはMicrosoft VPNをセットアップしており、それを使用すると、すべてのサーバーはVPNが割り当てられているクライアントのIPアドレスを見ることができます。
これはOpenVPNサーバー構成ファイルであり、読者の便宜のために説明を削除しました。
port 1194
proto udp
dev tun
user nobody
group nobody
persist-key
persist-tun
keepalive 10 120
topology subnet
server 10.0.13.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 10.0.0.1"
push "dhcp-option DNS 10.0.0.2"
push "route 10.0.0.0 255.255.0.0"
push "route 10.8.0.0 255.255.0.0"
dh none
ecdh-curve prime256v1
tls-crypt tls-crypt.key 0
crl-verify crl.pem
ca ca.crt
cert server_oy94rAaIiMtrnvAB.crt
key server_oy94rAaIiMtrnvAB.key
auth SHA256
cipher AES-128-GCM
ncp-ciphers AES-128-GCM
tls-server
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
status /var/log/openvpn/status.log
log /var/log/openvpn/openvpn.log
verb 3
plugin /opt/openvpn-ldap-auth/lib/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf
client-cert-not-required
server 10.0.13.0 255.255.255.0
ネットワークに設定しようとしましたが、server 10.0.13.0 255.255.0.0
OpenVPNサーバーはその設定が好きではなく、サブネットの最初のオクテットです0
。
簡単にするには:10.0.0.0/16ネットワークの一部のサーバーを10.0.13.0/24のVPNクライアントに接続するにはどうすればよいですか?それとも、OpenVPNサーバーに10.0.13.0/24の範囲のクライアントIPアドレスを割り当てますが、実際には10.0.0.0/16に属するにはどうすればよいですか?同じサーバーに別々のDHCPサーバーをインストールする必要がありますか?
答え1
説明から欠落している構成が表示されます。あなたが言っていない内容です。その他サーバーがVPNクライアントに到達する方法。
この設定がない場合、そのネットワークにアドレスを持つすべてのホストは、デフォルトで同じネットワーク10.0/16
(サブネットを含む)内の他のアドレスが10.0.13/24
「オンライン」であると想定します。つまり、中間ルータなしで直接接続できます。
テストの例として、ip r add 10.0.13.0/24 via 10.0.4.23
次のいずれかを試してみてください。その他10.0/16
ネットワークの一部であるLinuxサーバー(OpenVPNサーバーではありません):その後、特定のLinuxサーバーとOpenVPNクライアント間のトラフィックは定期的に流れなければなりません。
10.0/16
もちろん、Linux、Windows、Mac、Cisco、その他のホストなど、プライベートネットワーク上のすべてのホストにも同じことが当てはまります。実際、プライベートネットワーク上のすべてのホストにこのパスを設定する必要があります。
もちろん、ホストが多い場合、これはお勧めできません。ネットワークの面でより良いアプローチは、OpenVPNサーバーをプライベートネットワーク全体の中央ゲートウェイとして設定することです。実際には、すべてのホストのデフォルトゲートウェイになることもできます。
これが不可能であると仮定して、プライベートネットワーク(おそらくホスト?)にこれらの「中央ゲートウェイ」が既にある場合は、上記10.0.0.65
のパスを使用してそのゲートウェイを構成できます。他のホスト(ゲートウェイを参照)通常、従順とコンプライアンスが予想されます。ただし、このソリューションは通常、これらのホストが「中央ゲートウェイ」によってOpenVPNサーバーゲートウェイに再ルーティングされるため、最適ではありません。
別の方法としては、OpenVPNサーバーとして機能するLinuxサーバーに特別な構成を設定することで返品OpenVPNクライアントアドレスの「プロキシarp」として機能します。可能ですが、複雑で高度です。
ブリッジングソリューションはいこれは確かに迅速で簡単なソリューションですが、すべてのブロードキャストトラフィック(中規模のLANで頻繁に発生する可能性があります)がすべてのOpenVPNクライアントに伝播され、OpenVPNサーバーのリソースを束縛することを意味します。そしてあなたとあなたのクライアント間のインターネット接続、各ブロードキャストフレームに接続されたクライアントの数を掛けます。
答え2
私はこの問題を次の助けを借りて解決しました。イーサネットブリッジ。
ステップは次のとおりです。
- CentOSでOpenVPNサーバーを停止します。
systemctl stop openvpn@server
- CentOS 7にbridge-utilsパッケージをインストールする
yum install bridge-utils
- tap0 仮想イーサネットデバイスの作成
openvpn --mktun --dev tap0
- 足を作る
brctl addbr br0
- 新しいブリッジにeth0デバイス(プライベートIPを持つデバイス)を追加します。
brctl addif br0 eth0
- ブリッジにtap0デバイスを追加する
brctl addif br0 tap0
- Tap0デバイスにアクセスするには、無差別モードを有効にしてください。
ifconfig tap0 0.0.0.0 promisc up
- eth0 デバイスで無差別モードを有効にする
ifconfig eth0 0.0.0.0 promisc up
- 以前にeth0に設定したIPアドレスをbr0に割り当てます。
ifconfig br0 10.0.4.23 netmask 255.255.0.0 broadcast 10.0.255.255
- 新しいインターフェイスがトラフィックを許可できるようにiptablesルールを追加します。
iptables -A INPUT -i tap0 -j ACCEPT
iptables -A INPUT -i br0 -j ACCEPT
iptables -A FORWARD -i br0 -j ACCEPT
- VPNサーバー設定ファイルを開きます。たとえば、コメントを付けて、すぐ
/etc/openvpn/server/server.conf
下または上にdev tun
コンテンツを追加します。dev tap0
- 次のように
server
元のeth0にあり、今はbr0にあったIPアドレスを追加し、VPNがクライアントに割り当てるDHCPアドレスの範囲も追加します。
bridge 10.0.4.23 255.255.0.0 10.0.13.2 10.0.13.254
これにより、サーバーは 10.0.13.2 ~ 10.0.13.254 のアドレスをクライアントにリースできます。
- 今openvpnサーバーを起動してお楽しみください :)
systemctl start openvpn@servers
。