サーバーAは、他のサーバーBのVPNとして構成されています。現在のサーバーAは、VPNアドレスを使用してサーバー10.12.0.1
Bをpingできます。
すべてのHTTPSトラフィックをサーバーBを介してルーティングし、他のトラフィックにデフォルトのインターフェイスを使用させたいと思います。
そのために、私はインスピレーションを受けました。このUnixスタック交換の答えそして、次のコマンドを実行してください。
# define route
echo "200 myroute" >> /etc/iproute2/rt_tables
# seems necessary
sysctl -w net.ipv4.conf.wg1.rp_filter=2
# actual routing
ip route add table 200 10.12.0.0/24 dev wg1 src 10.12.0.10
ip route add table 200 default via 10.12.0.1
# actual rule telling HTTPS traffic to use table 200
ip rule add iif lo ipproto tcp dport 443 lookup 200
curl https://1.1.1.1
その後(または他のホストを)実行するとエラーが発生しますFailed to connect to 1.1.1.1 port 443: No route to host
。ルールを削除すると、すべてが正常に戻ります。
テーブル200への私のパスは間違っているようですが、元の答えのパスとプライマリインターフェイスのパスが一致しているようです。
この問題を調査してデバッグする方法を知っていますか?
ありがとう
追加情報:
$ ip route show table 200
default via 10.12.0.1 dev wg1
10.12.0.0/24 dev wg1 scope link src 10.12.0.10
$ ip route show dev wg1
10.12.0.0/24 proto kernel scope link src 10.12.0.10
$ ip route get 1.1.1.1 ipproto tcp dport 443
1.1.1.1 via 10.12.0.1 dev wg1 table 200 src 10.12.0.10 uid 1001
cache
$ ip route
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.51 metric 202
10.12.0.0/24 dev wg1 proto kernel scope link src 10.12.0.10
192.168.1.0/24 dev eth0 proto dhcp scope link src 192.168.1.51 metric 202
VPNはWireguard VPNです。 VPNを介してすべてのトラフィックをルーティングするように設定すると、すべてがうまく機能します。
答え1
1.1.1.1
WireGuard設定に含まれていないホスト()に接続しようとすると、「ホストへのパスなし」エラーが発生する可能性がありますAllowedIPs
。 wg-quickを使用しているとし、次のようにします。
〜のようにステップ1、サーバーAのWireGuard設定で、接続するIPアドレス(またはIPアドレスブロック)を含めるようにサーバーBセクションのAllowedIPs
設定を調整します。[Peer]
サーバーAがブロック内のすべてのHTTPSサーバー(特にテスト中のサーバー)1.1.1.1
に接続できるとします。また、このブロックを含むサーバーBのサーバーAで初期設定を構成したとします。この設定を次に変更します。192.0.2.0/24
192.0.2.123
AllowedIPs
10.12.0.0/24
AllowedIPs = 10.12.0.0/24, 192.0.2.0/24
テーブル200に対してサーバーAで以前に設定したパスとルールを削除し、WireGuardを再起動した後(たとえばsudo wg-quick down wg1; sudo wg-quick up wg1
)、次のコマンドを実行してこの変更をテストします。
$ curl -k https://192.0.2.123
少なくとも「ホストへのパスなし」エラーを削除する必要があります。それでもエラーが発生する場合は、サーバーBがファイアウォール/ルーティングルールを調整して、サーバーAからパケットを転送できるようにする必要があります192.0.2.0/24
。
〜のようにステップ2[Interface]
、サーバーAのWireGuard設定セクションで、次の設定を追加します。
Table = 200
これにより、wg-quickは自動的に生成されたパスをデフォルト200
テーブルではなくカスタムパステーブルに追加するように指示します。 WireGuardを再起動し、ルーティングテーブルを確認してください。
$ ip route
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.51 metric 202
192.168.1.0/24 dev eth0 proto dhcp scope link src 192.168.1.51 metric 202
$ ip route show table 200
10.12.0.0/24 dev wg1 scope link
192.0.2.0/24 dev wg1 scope link
次に、特別なHTTPSポリシールールを追加してください。
$ sudo ip rule add iif lo ipproto tcp dport 443 lookup 200
テストしてみてください。
$ curl -k https://192.0.2.123
〜のようにステップ3、HTTPS以外のサービス(SSHなど)に対してWireGuardを介してサーバーAからサーバーBに直接接続できると仮定すると、ブロックへのすべての接続に対してサーバーAに別のポリシールールを追加します10.12.0.0/24
。
$ sudo ip rule add to 10.12.0.0/24 table 200 priority 201
WireGuard を使用してサーバー A からサーバー B に再接続できるようになりました。
$ ssh 10.12.0.1