LinuxのVPS、VPN、およびポリシールーティング

LinuxのVPS、VPN、およびポリシールーティング

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テーブルに移動する方法がわかりません。

どんな手がかりがありますか?また - この構成で私が何を見逃しているのか知っていますか?

ありがとう

関連情報