Debian 11에서는 fwmark를 사용할 수 없습니다(bulleyes)

Debian 11에서는 fwmark를 사용할 수 없습니다(bulleyes)

많이 사용했던 레시피가 있는데 이번에는 Debian 11(커널 5.10.0-10-amd64)에서는 동작하지 않습니다.

내 설정은 기본적으로 RFC1918 LAN용 내부 인터페이스 eth0과 일부 ISP 상자에 연결된 두 개의 외부 인터페이스입니다.

ISP1의 eth1은 주소가 10.0.0.254이고 공용 IP가 1.2.3.4(기호)인 기본 라우터 역할을 합니다.

ISP2의 eth2에는 주소가 10.0.3.254이고 공개 주소가 2.3.4.5인 라우터가 있습니다.

가능한 경로가 다릅니다. 내 패킷의 경로를 제어하고 싶어서 몇 가지 규칙과 fwmark를 만들었습니다. 먼저 2<tab>secondrouter추가합니다./etc/iproute2/rt_tables

ip rule add fwmark 0x3 lookup secondrouter
ip route add default via 10.0.3.254 table secondrouter

ip route list table secondrouter모든 것이 좋고ip rule list

이 시점에서 나는 다음을 할 수 있습니다:

curl -4 ifconfig.me
1.2.3.4 #<- public ip address of my default route

그럼 내가 할게

iptables-legacy -t mangle -A OUTPUT -d 34.117.59.81 -j MARK --set-mark 0x3 

이제 내가 그렇게 하면

curl -4 ifconfig.me
<timeout>

공용 IP로 2.3.4.5를 기대하고 있습니다. 표시된 패킷이 IP 라우팅 테이블에서 경로를 얻지 못할 것이 분명하며, 더 나쁘게는 시간 초과가 발생합니다.

이전 버전의 데비안에서 똑같은 방식으로 이 작업을 수행하면 완벽하게 작동합니다.

참고: 내가 할 경우

ip route add 34.117.59.81 via <second router IP>

내 컬 테스트가 예상대로 완벽하게 실행됩니다.

curl -4 ifconfig.me
2.3.4.5 #<- Pub ip address of my second router

iptables라우팅을 위해 패킷을 사용 하거나 표시할 때 iptables-legacy문제가 발생합니다 . 그런데, 나는 잘 작동하는 많은 iptables 규칙을 가지고 있으므로 iptables 문제처럼 보이지 않습니다.

편집: 해결 방법: 테이블 출력에 변장을 추가하세요.

답변1

패킷이 시스템을 떠날 때 기본 출력 인터페이스에 해당하는 소스 IP 주소가 할당됩니다.

따라서 마킹 규칙이 패킷에 계획된 목적지가 아닌 다른 목적지를 제공하기 때문에 출력 인터페이스에 MASQUERADE 규칙을 추가해야 합니다.

iptables-legacy -t nat -A POSTROUTING -o eth2 -j MASQUERADE

netfilter의 처리 순서를 이해하려면 다음을 수행하십시오.플루프)

                     (input interface)
                             |
                             v
                     /-------+-------\
                     | sanity checks |
                     \-------+-------/
                             |
                             v hook NF_IP_PRE_ROUTING
                      +------+------+
                      | conntrack   |
                      | defrag.     |
                      +-------------+
                      | mangle      |
                      | PREROUTING  |
                      +-------------+
                      | nat (dst)   |
                      | PREROUTING  |
                      +------+------+
                             |
                             v
        local delivery  /----+----\    forward
       +---------------+   route   +---------------+
       |                \---------/                |
       v                                           v
 /-----+-----\                               /-----+-----\
 |  defrag.  |                               | TTL check |
 \-----+-----/                               | dec. TTL  |
       |                                     \-----+-----/
       v hook NF_IP_LOCAL_IN                       |
+------+------+                                    |
| mangle  (1) |                                    |
| INPUT       |                                    |
+-------------+                                    |
| filter      |                                    v
| INPUT       |                              /-----+-----\
+-------------+                              | DF check  |
| nat (src)(2)|                              \-----+-----/
+-------------+                                    |
| conntrack   |                                    |
| confirm     |                                    | 
+------+------+                               hook v NF_IP_FORWARD
       |                                    +------+------+
       v                                    | mangle  (1) |
/------+--------\                           | FORWARD     |
| local process |                           +-------------|
\------+--------/                           | filter      |
       |                                    | FORWARD     |
       v                                    +------+------+
 /-----+-----\                                     |
 |   route   |                                     |
 |   frag.   |                                     |
 \-----+-----/                                     |
       |                                           |
       v hook NF_IP_LOCAL_OUT                      |
+------+------+                                    |
| conntrack   |                                    |
| defrag.     |                                    |
+-------------+                                    |
| mangle      |                                    |
| OUTPUT      |                                    |
+-------------+                                    v
| nat (dst)(3)|                              /-----+-----\
| OUTPUT      |                              |   frag.   |
+-------------+                              \-----+-----/
| filter      |                                    |
| OUTPUT      |                                    |
+------+------+                                    |
       |                                           |
       v                                           |
 /-----+-----\                                     |
 |  reroute  |                                     |
 \-----+-----/                                     |
       |                                           |
       +------------------+     +------------------+
                          |     |
                          v     v hook NF_IP_POST_ROUTING
                      +---+-----+---+
                      | mangle  (1) |
                      | POSTROUTING |
                      +-------------+
                      | nat (src)   |
                      | defrag.     |
                      | POSTROUTING |
                      +-------------+
                      | conntrack   |
                      | confirm     |
                      | frag.       |
                      +------+------+
                             |
                             v
                   (output interface)

관련 정보