최근에 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