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
_
解決済み!
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を実行できます。次に、両方のネットワークのすべてのコンピューターにそれを許可する方法を理解する必要がありますが、それは別の質問です...
したがって、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パラメータを追加する必要はありません。デフォルトでは、トンネルのもう一方の端がゲートウェイとして追加されます。