最近VPSにCF WARPクライアントを設定したかったのですが、奇妙な問題が発生しました。ここがこの質問をするのに適した場所かどうかはわかりません。そうでない場合は申し訳ありませんが削除します。
背景:
インストールしましたCloudflare公式WARPクライアント私のVPS(Ubuntu 20.04)からCloudflare WARPネットワークに接続すると、SSHが切断され(自宅からVPSに)再接続されなくなります。
VPSから
$ warp-cli register
$ warp-cli set-mode warp
$ warp-cli connect
<<<<<<<< SSH Disconnect!
私はこの問題を自分で解決しようとします。
WebViewコンソールで(今はVPSにSSHで接続できないため、VPS WebViewコンソールを使用する必要があります):
$ ip addr
1: lo ...
2: enp1s0 ...
3: CloudflareWARP ...
$ ip rule show
0: from all lookup local
32765: not from all fwmark 0x100cf lookup 65743
32766: from all lookup main
32767: from all lookup default
0x100cf
明らかに、WARPクライアント自体で使用することを意図したいくつかのタグ付きパケットを除いて、VPSから他のサイトへのすべてのトラフィックはWARPネットワークによって引き継がれました。これが私のSSH接続が失われた理由です。
この種の問題を解決する標準的な方法(私が知っている限り、VPNクライアントは通常WireGuardのようにSSH接続を切断します)は、次のルールとパスを追加することです。
$ ip route list table main default
default via 45.32.80.1 dev enp1s0 proto dhcp src 45.32.82.124 metric 100
$ ip rule add table 200 from 45.32.82.124
$ ip route add table 200 default via 45.32.80.1 dev enp1s0 proto dhcp src 45.32.82.124
これがゲートウェイ45.32.82.124
でもあるVPSパブリックIPです。45.32.80.1
それから
$ ip rule show
0: from all lookup local
32764: from 45.32.82.124 lookup 200
32765: not from all fwmark 0x100cf lookup 65743
32766: from all lookup main
32767: from all lookup default
残念ながら、SSHはまだ接続されていません。同じ設定でWARPクライアントの代わりにWireGuardを使用すると、SSHが接続できるため、これは私を驚かせます。
WireGuardとWARPクライアントの設定はあまり変わりません。
WireGuardの設定は次のとおりです。
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP group default qlen 1000
link/ether 56:00:04:6b:06:1a brd ff:ff:ff:ff:ff:ff
inet 107.191.58.220/24 brd 107.191.58.255 scope global dynamic enp1s0
valid_lft 71276sec preferred_lft 71276sec
inet6 fe80::5400:4ff:fe6b:61a/64 scope link
valid_lft forever preferred_lft forever
3: wgclient: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 172.16.0.2/32 scope global wgclient
valid_lft forever preferred_lft forever
inet6 2606:4700:110:8cbe:b4b0:fa54:9af:e32d/128 scope global
valid_lft forever preferred_lft forever
$ ip rule show
0: from all lookup local
32763: from 107.191.58.220 lookup 200
32764: from all lookup main suppress_prefixlength 0
32765: not from all fwmark 0xca6c lookup 51820
32766: from all lookup main
32767: from all lookup default
$ ip route show table local
broadcast 107.191.58.0 dev enp1s0 proto kernel scope link src 107.191.58.220
local 107.191.58.220 dev enp1s0 proto kernel scope host src 107.191.58.220
broadcast 107.191.58.255 dev enp1s0 proto kernel scope link src 107.191.58.220
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
local 172.16.0.2 dev wgclient proto kernel scope host src 172.16.0.2
$ ip route show table main
default via 107.191.58.1 dev enp1s0 proto dhcp src 107.191.58.220 metric 100
107.191.58.0/24 dev enp1s0 proto kernel scope link src 107.191.58.220
169.254.169.254 via 107.191.58.1 dev enp1s0 proto dhcp src 107.191.58.220 metric 100
$ ip route show table 51820
default via wgclient scope link
$ ip route show table 200
default via 107.191.58.1 dev enp1s0
WARPの設定は次のとおりです。
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 fd01:db8:1111::3/128 scope global
valid_lft forever preferred_lft forever
inet6 fd01:db8:1111::2/128 scope global
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP group default qlen 1000
link/ether 56:00:04:6a:f8:84 brd ff:ff:ff:ff:ff:ff
inet 45.32.82.124/22 brd 45.32.83.255 scope global dynamic enp1s0
valid_lft 80142sec preferred_lft 80142sec
inet6 fe80::5400:4ff:fe6a:f884/64 scope link
valid_lft forever preferred_lft forever
62: CloudflareWARP: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc mq state UNKNOWN group default qlen 500
link/none
inet 172.16.0.2/32 scope global CloudflareWARP
valid_lft forever preferred_lft forever
inet6 2606:4700:110:85bb:76b8:7e7c:5e88:3230/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::7099:4d97:27a8:f1da/64 scope link stable-privacy
valid_lft forever preferred_lft forever
$ ip rule show
0: from all lookup local
32764: from 45.32.82.124 lookup 200
32765: not from all fwmark 0x100cf lookup 65743
32766: from all lookup main
32767: from all lookup default
$ ip route show table local
broadcast 45.32.80.0 dev enp1s0 proto kernel scope link src 45.32.82.124
local 45.32.82.124 dev enp1s0 proto kernel scope host src 45.32.82.124
broadcast 45.32.83.255 dev enp1s0 proto kernel scope link src 45.32.82.124
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
local 172.16.0.2 dev CloudflareWARP proto kernel scope host src 172.16.0.2
$ ip route show table main
default via 45.32.80.1 dev enp1s0 proto dhcp src 45.32.82.124 metric 100
45.32.80.0/22 dev enp1s0 proto kernel scope link src 45.32.82.124
169.254.169.254 via 45.32.80.1 dev enp1s0 proto dhcp src 45.32.82.124 metric 100
$ ip route show table 65743
0.0.0.0/5 dev CloudflareWARP proto static scope link
8.0.0.0/7 dev CloudflareWARP proto static scope link
....
#### Almost all IPs
$ ip route show table 200
default via 45.32.80.1 dev enp1s0 proto dhcp src 45.32.82.124
いくつかの他の設定も試しました。
WireGuardなどのWARP設定に追加されましたが、
32764: from all lookup main suppress_prefixlength 0
SSHはまだ機能しません。SSH経由で接続すると、VPS Iから
tcpdump -i enp1s0
SSHメッセージを記録できます。したがって、インバウンドトラフィックは大丈夫でしょう。sshd を VPS パブリック IP 45.32.82.124 にバインドして
/etc/ssh/sshd_config
sshd を再起動すると、まだ SSH を使用できません。試験を終えた
ip route get
$ ip route get 8.8.8.8 8.8.8.8 dev CloudflareWARP table 65743 src 172.16.0.2 uid 1001 $ ip route get 8.8.8.8 from 45.32.82.124 8.8.8.8 dev 45.32.82.124 via 45.32.80.1 dev enp1s0 table 200 uid 1001
ping
enp1s0を試してください$ ping 8.8.8.8 # This is OK, because it is using WARP Network $ ping -I enp1s0 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data ping: sendmesg: Operation not permitted #### Why? #### It can work in WireGuard setting!
ping
でマークしてみてください。# sudo ping -m 65743 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data ping: sendmesg: Operation not permitted #### Why? #### It can work in WireGuard setting! (65743 is the decimal of the mark 0x100cf, it should go main table, right?)
ルールを削除しても、
32765: not from all fwmark 0x100cf lookup 65743
SSHはまだ機能しません。iptablesに変更はありません。 WireguardのiptablesとWARP設定が同じであることを確認しました。
SSHを動作させる唯一の方法は、
add-excluded-route
WARPクライアントを使用することです。warp-cli add-excluded-route <My-Home-IP>
このコマンドが実行する作業は、
<My-Home-IP>
表 65743 を除外するため、簡単です。しかし、なぜ私のテーブル200は何の効果もありませんか?
質問:
WireGuard と WARP 設定をまったく同じに設定しましたが、SSH は WireGuard 設定では接続できますが、WARP 設定では接続できません。もしそうなら、WARPクライアントのように、ルーティングやパケットフィルタリングに影響を与え、私のトラフィックをブロックする他の要因はありますかip rule
?ip route
iptables
本当にありがとうございました。
答え1
私はCloudflare WARPについて知りませんが(したがって、ここに次の問題があるかどうかを評価することはできません)、あなたの質問に答えると、実際にLinuxネットワーキングには「ルーティング」に影響を与えるだけでなく、優先順位の高いものがあります。 :
IPsec(またはネットワーク層で使用されるメカニズム)
ip xfrm policy list
ip xfrm state list
通常、これは何が起こっているのかを理解するのに役立ちます。
ip route get 1.2.3.4 ipproto tcp dport 22
まだアドレスがないため、ローカルで開始された新しい接続へのポリシールーティングが失敗しているようですfrom
。
別のルールを追加する必要があります。
ip rule add table 200 priority 30000 ipproto tcp dport 22