web-dev-qa-db-ja.com

OpenVPNで2つのネットワークを接続する

OpenVPN経由で2つのネットワークを接続しようとしています。

ゲートウェイは相互にpingを実行できますが、参加しているネットワーク上の他のコンピューターにアクセスすることはできません。ログにはエラーは表示されず、接続が確立されます。

ここで何が欠けていますか?多くの人がさまざまな理由でこの問題を抱えているようですが、50回以上の試行の後、私はあきらめて尋ねることにしました:)

ネットワーク1:

_dev tun port 1194 ifconfig 10.8.222.40 10.8.222.41 route 10.2.1.0 255.255.255.0 vpn_gateway comp-lzo keepalive 10 60 persist-key persist-tun user nobody group nobody secret /etc/openvpn/static.key_

_ip route default via 10.0.1.1 dev eth0 10.0.1.0/27 dev eth0 proto kernel scope link src 10.0.1.9 10.2.1.0/24 via 10.8.222.41 dev tun0 10.3.0.0/24 via 10.3.0.2 dev tun2 10.3.0.2 dev tun2 proto kernel scope link src 10.3.0.1 10.8.222.41 dev tun0 proto kernel scope link src 10.8.222.40 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1_

ネットワーク2

_dev tun port 1194 remote my_ext_ip 1194 ifconfig 10.8.222.41 10.8.222.40 route 10.0.0.0 255.254.0.0 vpn_gateway comp-lzo keepalive 10 60 persist-key persist-tun user nobody group nobody secret /etc/openvpn/static.key_

_ip route default via 10.2.1.1 dev eth0 10.0.0.0/15 via 10.8.222.40 dev tun0 10.2.1.0/24 dev eth0 proto kernel scope link src 10.2.1.9 10.8.222.40 dev tun0 proto kernel scope link src 10.8.222.41 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1 172.27.224.0/22 dev as0t0 proto kernel scope link src 172.27.224.1 172.27.228.0/22 dev as0t1 proto kernel scope link src 172.27.228.1 172.27.232.0/22 dev as0t2 proto kernel scope link src 172.27.232.1 172.27.236.0/22 dev as0t3 proto kernel scope link src 172.27.236.1_

更新:

これが私がiptablesに関して持っているものです:

両方のネットワーク: _iptables -I FORWARD -i eth0 -o tun0 -m conntrack --ctstate NEW -j ACCEPT iptables -I FORWARD -i tun0 -o eth0 -m conntrack --ctstate NEW -j ACCEPT_

ネットワーク1: _iptables -t nat -A POSTROUTING -s "10.0.0.0/15" -o "eth0" -j MASQUERADE iptables -A FORWARD -p tcp -s 10.0.0.0/15 -d 0.0.0.0/0 -j ACCEPT_

ネットワーク2: _iptables -t nat -A POSTROUTING -s "10.2.1.0/24" -o "eth0" -j MASQUERADE iptables -A FORWARD -p tcp -s 10.2.1.0/24 -d 0.0.0.0/0 -j ACCEPT_

\

更新2:

トンネルに入る:# tcpdump -i tun0 listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes 01:01:15.181262 IP ip-10-8-222-41.ec2.internal > ip-10-0-1-5.ec2.internal: ICMP echo request, id 28767, seq 1, length 64

トンネルを終了します:# tcpdump -i tun0 listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes 01:03:44.304930 IP 10.8.222.41 > 10.0.1.5: ICMP echo request, id 28784, seq 1, length 64

インターフェイスの切り替え _# tcpdump -i eth0 01:08:56.093291 IP 10.8.222.41 > 10.0.1.5: ICMP echo request, id 28785, seq 3, length 64_

1
user3521621

解決済み!

tcpdumpを使用すると、iptables転送のパケットのソースが10.8.222.41/32であることがわかりました。

だから追加

iptables -t nat -A POSTROUTING -s "10.8.222.41/32" -o "eth0" -j MASQUERADE iptables -A FORWARD -p tcp -s 10.8.222.41/32 -d 0.0.0.0/0 -j ACCEPT

問題を解決しました!

これで、両方のゲートウェイが互いのネット​​ワーク内のサーバーにpingを実行できます。次に、両方のネットワークのすべてのコンピューターにそれを許可する方法を理解する必要がありますが、それは別の質問です...

1
user3521621

したがって、IPルートの出力からは次のようになります

eth0 at Network 1 is 10.0.1.0 with mask 255.255.255.224
eth0 at Network 2 is 10.2.1.0 with mask 255.255.255.0

したがって、ネットワーク1マシンのopenvpnconfを編集して次のようにします。

route 10.2.1.0 255.255.255.0  #this is the remote network I want to see

ネットワーク2マシンのopenvpnconfは、次のように読みます。

route 10.0.1.0 255.255.255.224 #this is the remote network I want to see

それは適切なルートをもたらすはずです。また、ルートラインの最後にvpn_gatewayパラメータを追加する必要はありません。デフォルトでは、トンネルのもう一方の端がゲートウェイとして追加されます。

0
Ricardo