OpenVPNトンネル経由で外部サーバーにpingを送信しても機能しない

OpenVPNトンネル経由で外部サーバーにpingを送信しても機能しない

私は OpenVPN サーバーとクライアントを持っており、このトンネルを使用して10.0.8.0/24インターネット全体だけでなく、インターネット全体にアクセスしたいと考えています。これまでのところ、インターフェイスを介してクライアントからサーバーに ping を実行するとtun0機能し、その逆も同様です。

ただし、www.google.comクライアントからのping はtun0機能しません (すべてのパケットが失われます)。

tun0インターネットの宛先から来るすべてのパケットが転送されるようにサーバーを構成する必要があると考えたので、次の iptables 構成行を作成しました。

interface_connecting_to_the_internet='eth0'
interface_openvpn='tun0'
internet_ip_address=`ifconfig "$interface_connecting_to_the_internet" | sed -n s'/.*inet \([0-9.]*\).*/\1/p'`

iptables -t nat -A POSTROUTING -o "${interface_connecting_to_the_internet}" -j SNAT --to-source "${internet_ip_address}"
echo '1' > /proc/sys/net/ipv4/ip_forward

しかし、これは機能せず、パケットは依然として失われており、私の設定に何が問題があるのか​​疑問に思っています。


詳細:

ip route はサーバー上で次のように指定します:

default via 176.31.127.254 dev eth0  metric 3 
10.8.0.0/24 via 10.8.0.2 dev tun0 
10.8.0.2 dev tun0  proto kernel  scope link  src 10.8.0.1 
127.0.0.0/8 via 127.0.0.1 dev lo 
176.31.127.0/24 dev eth0  proto kernel  scope link  src 176.31.127.109 

ip route はクライアントに以下を提供します:

default via 192.168.1.1 dev wlan0  proto static 
10.8.0.1 via 10.8.0.5 dev tun0 
10.8.0.5 dev tun0  proto kernel  scope link  src 10.8.0.6 
127.0.0.0/8 via 127.0.0.1 dev lo  scope link 
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.109 

  • クライアントは Wi-Fi アダプタwlan0と TUN アダプタを使用しますtun0
  • サーバーはイーサネット アダプタeth0と TUN アダプタを使用しますtun0
  • VPNは10.0.8.0/24

  • クライアントと Linux は両方とも Linux 3.6.1 を使用しています。

答え1

議論を要約すると次のようになります。

クライアント C からサーバー S への VPN を介して特定のホスト A に到達するには、次の操作を行う必要があります。

  • S で IP 転送を有効にする ( sysctl -w net.ipv4.ip_forward=1)
  • S: 上の iptables を介してマスカレードまたは snat のいずれかを有効にするか、 iptables -t nat -A POSTROUTING -o ext_if -j MASQUERADEまたはおよびiptables -t nat -A POSTROUTING -o ext_if-j SNAT --to-source ext_ipの明らかな意味を持つ。ext_ifext_ip
  • Cに適切なルーティングを設定する(SはSのIPアドレスを示す)VPNで):
    • S 経由で A への明示的なルートを設定することによって:ip route add A via S dev vpn_if
    • S: 経由でデフォルト ルートを設定します。ip route add default via S dev vpn_ifこの場合、 S: への適切なルートも設定する必要がありますip route add S via previous_gateway dev prev_if
    • サーバー上で を使用することにより、OpenVPN は S 経由で Cへpush "redirect-gateway def1"のルートを設定します。これはデフォルト ルートよりも具体的であり、トンネルが停止したときに簡単に削除できます。0.0.0.0/1128.0.0.0/1

関連情報