
私は 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_if
ext_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/1
128.0.0.0/1
- S 経由で A への明示的なルートを設定することによって: