
투명 프록시 모드, 즉 인라인 Linux 브리지 모드에서 Apache 트래픽 서버를 작동시키려고 합니다. 그들은 가지고 있다선적 서류 비치이를 수행하는 방법에 대해. 나는 그들의 문서에 따라 내 Linux 시스템을 구성했으며 내 구성은 다음과 같습니다.
brctl addbr br0
brctl stp br0 off
brctl addif br0 enp2s0
brctl addif br0 eno1
ifconfig enp2s0 0 0.0.0.0
ifconfig eno1 0 0.0.0.0
ifconfig br0 0.0.0.0
ifconfig br0 192.168.10.100 netmask 255.255.255.0 up
ebtables -t broute -F
ebtables -t broute -A BROUTING -p IPv4 --ip-proto tcp --ip-dport 80 -j redirect --redirect-target DROP
ebtables -t broute -A BROUTING -p IPv4 --ip-proto tcp --ip-sport 80 -j redirect --redirect-target DROP
iptables -t mangle -A PREROUTING -i eno1 -p tcp -m tcp --dport 80 -j TPROXY --on-ip 0.0.0.0 --on-port 8080 --tproxy-mark 1/1
iptables -t mangle -A PREROUTING -i enp2s0 -p tcp -m tcp --sport 80 -j MARK --set-mark 1/1
ip rule add fwmark 1/1 table 1
ip route add local 0.0.0.0/0 dev lo table 1
그러나 이 구성은 작동하지 않는 것 같습니다. 구성에 따르면 ebtables 및 iptables 규칙은 포트 80으로 향하는 트래픽을 가로채서 포트 8080으로 리디렉션합니다. tcpdump 출력에 따르면 초기 요청은 내 Linux 시스템으로 오는 것 같습니다.
tshark -i eno1 port 80
Running as user "root" and group "root". This could be dangerous.
Capturing on 'eno1'
1 0.000000000 192.168.20.200 -> 192.168.20.50 TCP 74 58986 > http [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=345213688 TSecr=0 WS=128
2 1.002013264 192.168.20.200 -> 192.168.20.50 TCP 74 [TCP Retransmission] 58986 > http [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=345214690 TSecr=0 WS=128
3 3.008098848 192.168.20.200 -> 192.168.20.50 TCP 74 [TCP Retransmission] 58986 > http [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=345216696 TSecr=0 WS=128
3 packets captured
그러나 iptables/ebtables가 스택을 전달하지 않는 것 같습니다. iptables 규칙에 추적을 추가했는데 이것이 로그에 표시되는 내용입니다.
[ 5425.095575] TRACE: raw:PREROUTING:policy:2 IN=eno1 OUT= MAC=0c:c4:7a:78:97:c6:0c:c4:7a:b5:be:e9:08:00 SRC=192.168.20.200 DST=192.168.20.50 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=41608 DF PROTO=TCP SPT=58922 DPT=80 SEQ=2153102820 ACK=0 WINDOW=29200 RES=0x00 SYN URGP=0 OPT (020405B40402080A1478234C0000000001030307)
[ 5425.095620] TRACE: mangle:PREROUTING:rule:1 IN=eno1 OUT= MAC=0c:c4:7a:78:97:c6:0c:c4:7a:b5:be:e9:08:00 SRC=192.168.20.200 DST=192.168.20.50 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=41608 DF PROTO=TCP SPT=58922 DPT=80 SEQ=2153102820 ACK=0 WINDOW=29200 RES=0x00 SYN URGP=0 OPT (020405B40402080A1478234C0000000001030307)
iptables 추적은 tcpdump 출력에서 내가 보고 있는 내용을 확인합니다. 요청이 iptables로 오고 Linux IP 스택 어딘가에 삭제되는 것 같습니다. 디버깅을 어디서 어떻게 해야 할지 잘 모르겠습니다.
이 주제에 대해 온라인에서 읽은 누군가가 비활성화할 것을 제안했습니다.rp_필터. 그러나 rp_filter를 꺼도 도움이 되지 않았습니다. 다른 누군가가 IP 전달을 활성화하라고 제안했지만 그것도 도움이 되지 않았습니다. 문제를 해결하는 데 도움이 되거나 다음에 디버깅할 내용이나 위치에 대한 최소한의 조언을 주시면 감사하겠습니다.