`iprule`, `iproute` 및 `iptables` 외에 Linux의 라우팅 및 패킷 필터링에 영향을 줄 수 있는 다른 것이 있습니까?

`iprule`, `iproute` 및 `iptables` 외에 Linux의 라우팅 및 패킷 필터링에 영향을 줄 수 있는 다른 것이 있습니까?

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

몇 가지 다른 설정도 시도했습니다.

  1. WireGuard와 같은 WARP 설정에 추가되었지만 32764: from all lookup main suppress_prefixlength 0SSH는 여전히 작동하지 않습니다.

  2. SSH를 통해 연결되면 VPS I에서 tcpdump -i enp1s0SSH 메시지를 기록할 수 있습니다. 따라서 인바운드 트래픽은 괜찮을 것입니다.

  3. sshd를 VPS 공용 IP 45.32.82.124에 바인딩하고 /etc/ssh/sshd_configsshd를 다시 시작하면 여전히 SSH를 사용할 수 없습니다.

  4. 시험을 마친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
    
  5. pingenp1s0을 사용해 보세요

    $ 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!
    
  6. 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?)
    
  7. 규칙을 제거해도 32765: not from all fwmark 0x100cf lookup 65743SSH는 여전히 작동하지 않습니다.

  8. iptables에는 변경 사항이 없습니다. Wireguard의 iptables와 WARP 설정이 동일한지 확인했습니다.

  9. SSH를 작동시키는 유일한 방법은 add-excluded-routeWARP 클라이언트를 사용하는 것입니다.

    warp-cli add-excluded-route <My-Home-IP>
    

    이 명령이 수행하는 작업은 <My-Home-IP>테이블 65743을 제외하는 것이므로 간단합니다. 그런데 왜 내 테이블 200이 아무런 효과가 없습니까?

질문:

WireGuard와 WARP 설정을 정확히 동일하게 구성했지만 SSH는 WireGuard 설정에서는 연결할 수 있지만 WARP 설정에서는 연결할 수 없습니다. 그렇다면 WARP 클라이언트처럼 라우팅이나 패킷 필터링 에 영향을 주고 내 트래픽을 차단할 수 있는 다른 요소가 있습니까 ip rule?ip routeiptables

정말 고마워요.

답변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

관련 정보