SSH 接続は通常のネットワークを通過しますが、VPS の他のすべてのトラフィックは、VPN を通過するように VPS で VPN を設定する方法を探しています。
そのために、ポリシールーティングを使用することにしました。
/etc/iptables2/rt_tables ファイルに VPN という新しいルーティングテーブルを追加しました。
その後、SSH以外のすべてのパケットを表示しました。
iptables -t mangle -A PREROUTING -p tcp ! --dport 22 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING ! -p tcp -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp ! --sport 22 -j MARK --set-mark 3
iptables -t mangle -A OUTPUT ! -p tcp -j MARK --set-mark 4
新しく作成されたポリシーに割り当てます。
ip rule add fwmark 1 table VPN
ip rule add fwmark 2 table VPN
ip rule add fwmark 3 table VPN
ip rule add fwmark 4 table VPN
OpenVPNはデフォルトですべてのパスをデフォルトのルートテーブルに追加するので、--route-noexecを使用してこれを回避し、環境変数を使用してVPNルーティングテーブルにデフォルトのルートを追加するスクリプトを作成しました。
openvpn --config [config file] --script-security 2 --route-noexec --route-up /home/user/script.sh
スクリプト自体は次のとおりです。
#cat script.sh
#!/bin/bash
ip route add default via $route_vpn_gateway table VPN
このコマンドを実行した後も、VPSにログインしていますが、外部の世界とは接続されていません。
ルーティングテーブルに表示される内容は次のとおりです。
# ip route show table VPN
default via 10.7.7.1 dev tun0
# ip route show table main
default via [VPS Gateway] dev eth0
10.7.7.0/24 dev tun0 proto kernel scope link src 10.7.7.210
[VPS Gateway] dev ens3 scope link
これで、プライマリルーティングテーブルの2番目の行があってはいけないことを理解しましたが、それをVPNテーブルに移動する方法がわかりません。
どんな手がかりがありますか?また - この構成で私が何を見逃しているのか知っていますか?
ありがとう