iptables Masquerade에 일부 로컬 패킷이 누락되었나요?

iptables Masquerade에 일부 로컬 패킷이 누락되었나요?

openwrt에서는 구성 전달을 활성화했습니다 lan. 내 LAN은 일부 컴퓨터가 다른 네트워크 IP(예: 192.168.1.15)를 ping할 때 tcpdump가 wan에서 일부 로컬 패킷을 가져오며 이로 인해 wan이 종료됩니다. (내 WAN은 3G 모뎀입니다).wanmasq192.168.100.0/24

openwrt 방화벽 구성:

config defaults
    option syn_flood '1'
    option input 'DROP'
    option output 'DROP'
    option forward 'DROP'

config zone
    option name 'lan'
    list network 'lan'
    option input 'ACCEPT'
    option forward 'DROP'
    option output 'ACCEPT'

config zone
    option name 'cellular'
    list network 'cellular'
    option input 'DROP'
    option forward 'DROP'
    option output 'ACCEPT'
    option masq '1'
    option mtu_fix '1'

config forwarding
    option src 'lan'
    option dest 'cellular'

컴퓨터가 LAN에서 실행 중인 경우:

 ping -I 192.168.1.15 114.114.114.114

ppp에서 일부 유효하지 않은 패킷을 캡처할 수 있습니다.

 tcpdump -i 3g-cellular -s 0 -w a.pcap

여기에 이미지 설명을 입력하세요.

iptables -t nat -L -v:

Chain POSTROUTING (policy ACCEPT 119 packets, 7439 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 337 24011 zone_wan_postrouting  all  --  any    3g-cellular  anywhere             anywhere             /* !fw3 */

Chain zone_wan_postrouting
 pkts bytes target     prot opt in     out     source               destination         
  337 24011 MASQUERADE  all  --  any    any     anywhere             anywhere             /* !fw3 */

답변1

즉, openwrt 방화벽은 자체 LAN에서 들어오는 NAT 패킷만 사용하는 것 같습니다. 따라서 iptables규칙에는 소스에 대한 추가 제한이 있을 수 있습니다.

iptables현재 방화벽 구성(등)에서 생성된 모든 규칙을 확인하여 iptables -S이를 확인할 수 있습니다.

해결 방법으로 iptablesNAT 규칙을 소스 필터를 사용하지 않는 변형으로 직접 수정할 수 있습니다.

iptables원하는 규칙을 생성하도록 openwrt 방화벽 구성을 변경하는 방법을 모르겠습니다 . 아마도 OpenWRT 커뮤니티가 알게 될 것입니다.

편집하다

zone_wan_postrouting모든 패킷이 결국 도착하지 않는 기존 OpenWRT 방화벽 구성의 상황 예:

# iptables -S -t nat
...
-A POSTROUTING -j delegate_postrouting
-A delegate_postrouting -m comment --comment "user chain for postrouting" -j postrouting_rule
-A delegate_postrouting -o br-wan -j zone_wan_postrouting
-A delegate_postrouting -o br-client -j zone_client_postrouting
-A delegate_postrouting -o local-node -j zone_local_node_postrouting
...
-A zone_wan_postrouting -m comment --comment "user chain for postrouting" -j postrouting_wan_rule
-A zone_wan_postrouting -j MASQUERADE
...

보시다시피, 체인은 패킷에 해당 패킷이 있는지 확인하는 나가는 인터페이스 로 POSTROUTING점프( -j) 하고 , 이 경우 무조건 패킷을 위조하는 곳으로 점프합니다. 다른 나가는 인터페이스( , )는 다른 체인으로 전달됩니다.delegate_postroutingbr-wanzone_wan_postroutingbr-clientlocal-node

그래서 조건은아웃바운드 인터페이스br-wan. 특정 소스 또는 대상 범위와 같은 다른 조건을 쉽게 추가할 수 있습니다.

-A delegate_postrouting -o br-wan -s 192.168.100.0/24 -j zone_wan_postrouting

또는 훨씬 더 복잡한 패킷 태그, 프로토콜, 포트 및 기타 여러 가지가 있습니다.

그래서 실제로는 없어요보고 있다우리는 귀하의 모든 iptables 규칙을 알 수 없습니다. 어쩌면 모든 패킷이 이런 식으로 가고 문제는 다른 곳에 있다는 것이 사실일 수도 있습니다. 에 나타나지 않는 추가 조건이 있을 수도 있습니다 iptables -L. 아마.

관련 정보