VPN サーバー経由でインターネット内のホストにトラフィックをルーティングする必要があります。
構成:
コンピューター: ubuntu-12.04
eth0 - xxxx/24
tun0 - inet アドレス:10.8.0.6 PtP:10.8.0.5 マスク:255.255.255.255
OpenVPN サーバー (Amazon) があります:
Ubuntu-12.04 について
eth0 - yyyy/24
tun0 - inet アドレス:10.8.0.1 PtP:10.8.0.2 マスク:255.255.255.255
インターネット IP にホストがあります: qqqq
qqqq へのトラフィックを OpenVPN サーバー経由で送信したいです。そのためには、次の操作を行います。
iptables:
テーブル mangle でパケットをマークします:
sudo iptables -t mangle -A OUTPUT -d q.q.q.q -j MARK --set-mark 2
tun0 を介して qqqq にトラフィックを送信します:
sudo iptables -t nat -A POSTROUTING -d q.q.q.q -j SNAT --to-source 10.8.0.6
iproute2:
/etc/iproute2/rt_tablesにテーブル「100」を作成します
sudo ip rule add fwmark 2 table 100
sudo ip route add default via 10.8.0.5 table 100
1台目のコンピュータでのtcpdump:
14:22:04.554399 IP 10.8.0.6 > qqqq.clodo.ru : ICMP エコー要求、ID 11717、シーケンス 1、長さ 64
14:22:04.681918 IP qqqq.clodo.ru > 10.8.0.6: ICMP エコー応答、ID 11717、シーケンス 1、長さ 64
14:22:05.562577 IP 10.8.0.6 > qqqq.clodo.ru : ICMP エコー要求、ID 11717、シーケンス 2、長さ 64
14:22:05.690240 IP qqqq.clodo.ru > 10.8.0.6: ICMP エコー応答、ID 11717、シーケンス 2、長さ 64
しかし、ping はありません。送信されたパケットは 2 つ、受信されたパケットは 0 つ、パケット損失は 100% です。
答え1
パケットにマークを付ける必要はありません。計画していることを実行するには、次のものが必要です。
サーバー構成ファイルに以下を追加します。
"push route q.q.q.q 255.255.255.255"
上記によりルートがクライアント側にプッシュされるため、クライアントからその IP に送信されるすべてのトラフィックは openvpn トンネルを介して送信されます。
また、サーバー側ではクライアントからの着信トラフィックを受け入れる必要があり、次のようにクライアントサブネットからのすべてのトラフィックを受け入れることができます。
iptables -A INPUT -s 10.8.0.0/24 -j ACCEPT
これも必要になるかもしれません。
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
クライアントからサーバー側へのトラフィックをNATする必要があります[サーバー側で実行してください]
iptables -t nat -A POSTROUTING -d q.q.q.q -j SNAT --to-source PUBLIC_IP_OR_YOUR_VPN_SERVER
また、iproute2 や mangle テーブルも必要ありません。
ルールの順序は重要なので、一致するドロップルールの前にルールを記入してください。