
iptables
표시와 규칙을 사용하여 SSH 터널(-w) 아래로 HTTPS 연결을 라우팅하고 있습니다. iproute2
이렇게 해야 하는 이유는 최소한 인위적인 것이므로 대부분의 대체 솔루션이 전혀 작동하지 않을 수 있습니다.
tun0 장치가 존재하고 원하는 대로 작동하고 있으며 OUTPUT 체인에 MARK를 적용하면 라우팅이 작동하지만 어떤 이유로 FORWARD 체인에 MARK를 적용하면 라우팅 규칙이 작동하지 않는 것처럼 보입니다.
OS는 2.6.32 커널과 1.4.7 iptables를 갖춘 CentOS 6.7입니다. 표시 iptables
및 로깅:
# iptables -t mangle -A FORWARD -p tcp --dport 443 -j MARK --set-mark 1
# iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 1
# iptables -t mangle -A POSTROUTING -m mark --mark 1 -j LOG --log-prefix "marked: "
규칙 iproute2
설정:
# cat 201 tunneled >> /etc/iproute2/rt_tables
# ip rule add fwmark 1 table tunneled
# ip route add default via 192.168.100.1 dev tun1 table tunneled
결과를 표시하는 로그의 작은 섹션은 다음과 같습니다.
Feb 17 19:11:35 nhopm kernel: marked: IN= OUT=eth0 SRC=192.168.82.2 DST=69.30.217.90 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=16734 DF PROTO=TCP SPT=34619 DPT=443 WINDOW=29200 RES=0x00 SYN URGP=0 MARK=0x1
Feb 17 19:12:00 nhopm kernel: marked: IN= OUT=tun1 SRC=192.168.81.8 DST=69.30.217.90 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=62747 DF PROTO=TCP SPT=55349 DPT=443 WINDOW=14600 RES=0x00 SYN URGP=0 MARK=0x1
호스트에는 2개의 NIC( eth0
192.168.81.8)가 있으며 192.168.81.1은 기본 게이트웨이이고 eth1
192.168.82.8은 192.168.82.0/24의 기본 게이트웨이 역할을 합니다. 이 설정에는 문제가 없으며 예상대로 작동합니다. 터널 tun0의 맨 끝에는 192.168.100.1이 있습니다.
자세한 내용을 너무 많이 설명하지 않고 문제를 설명하는 가장 간단한 상황으로 범위를 좁히려고 노력했지만 문제가 있는 위치를 찾는 데 필요한 만큼의 세부 정보를 제공할 것입니다. 도움이 될 수 있는 내용이 있으면 댓글로 요청하세요. 다행히도 나는 이것이 어떻게 작동하는지에 대한 작은 부분을 오해했습니다.
해결 방법
위의 작업을 수행하려는 나의 시도는 이것에 기초했습니다.iptables
흐름도를 기반으로 했습니다.
iptables.info에서
이는 동일한 세트라는 사실을 숨깁니다.라우팅 결정FORWARD 체인에서 오는 패킷과 달리 OUTPUT 체인에서 들어오는 패킷에는 적용되지 않습니다.
이 작업을 수행하려면 FORWARD 체인에서 수행된 표시를 PREROUTING 체인의 유사한 항목으로 교체해야 했습니다.
iptables -t mangle -A PREROUTING -p tcp --dport 443 ! -d 192.168.0.0/16 -j MARK --set-mark 1
어쨌든 실제로 내 요구에 조금 더 적합합니다.
나는 아직 이에 대한 문서를 찾지 못했기 때문에 이에 대한 답변을 (아직) 만들지 않습니다. 누군가가 저를 이기지 않는 한 답변을 제공할 것입니다.