이전 코드에는 몇 가지 IP 라우팅 규칙이 있지만 이것이 무엇을 의미하는지 모르겠습니다.
ip route flush table 100
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
답변1
한 번에 한 줄씩:
ip route flush table 100
ID가 100인 테이블을 지워야 합니다.
ip rule add fwmark 1 lookup 100
1
--set-mark 1
테이블 100에서 참조되도록 표시된 패킷(iptables에 있는 것으로 추측됨)에 규칙을 추가합니다 . 더 많은 콘텐츠ip rule
문서.
ip route add local 0.0.0.0/0 dev lo table 100
모든 트래픽( 0.0.0.0/0
에 해당 default
)을 장치로 라우팅합니다 lo
. 즉,로컬 루프백, 로컬 시스템의 핫워드를 호출합니다.
테이블 ID는 정수(예제에서는 100)일 필요는 없으며 문자열일 수도 있습니다.여기흥미로운 예입니다.
답변2
이 코드는 확실히 Linux의 투명한 프록시 설정의 일부입니다(iptables' 사용).socket
성냥그리고TPROXY
표적또는 nftablessocket
표현하다그리고tproxy
성명).
Linux 커널의 문서tproxy.txt
:
1. Making non-local sockets work ================================ The idea is that you identify packets with destination address matching a local socket on your box, set the packet mark to a certain value: # iptables -t mangle -N DIVERT # iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT # iptables -t mangle -A DIVERT -j MARK --set-mark 1 # iptables -t mangle -A DIVERT -j ACCEPT Alternatively you can do this in nft with the following commands: # nft add table filter # nft add chain filter divert "{ type filter hook prerouting priority -150; }" # nft add rule filter divert meta l4proto tcp socket transparent 1 meta mark set 1 accept And then match on that value using policy routing to have those packets delivered locally: # ip rule add fwmark 1 lookup 100 # ip route add local 0.0.0.0/0 dev lo table 100
첫 번째 명령은 표시된 패킷에 대한 대체 라우팅 테이블을 선택합니다. 두 번째 명령은 이 라우팅 테이블에 무언가를 추가합니다. 즉, 패킷(라우팅되어야 했지만 방향이 전환됨)을 가로채서 로컬 시스템에 도달하게 합니다.
위의 첫 번째 부분은 보류 상태입니다. 대상 주소가 기본 호스트 주소가 아니지만 IP_TRANSPARENT 소켓 옵션을 활성화하여 로컬 소켓에 여전히 존재하기 때문에 전송된 연결(아래 부분을 통해)은 계속 전송됩니다.
Note that for this to work you'll have to modify the proxy to enable (SOL_IP, IP_TRANSPARENT) for the listening socket.
이 문제를 처리하려면 전용 애플리케이션이 있어야 합니다. 예를 들어오징어또는하 요원다음 tproxy 규칙과 일치하는 충분한 구성을 갖추십시오.
The 'TPROXY' target provides similar functionality without relying on NAT. Simply add rules like this to the iptables ruleset above: # iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY \ --tproxy-mark 0x1/0x1 --on-port 50080 Or the following rule to nft: # nft add rule filter divert tcp dport 80 tproxy to :50080 meta mark set 1 accept