VPN을 사용하고 있지만 사용자가 VPN을 통하지 않고 실제 IP 주소를 사용하여 네트워크에 액세스할 수 있기를 원합니다.
문제는 이와 같은 빠른 Google을 통해 찾은 모든 솔루션입니다.http://blog.sebastien.raveau.name/2009/04/per-process-routing.html 수동으로 라우팅을 구성하고 iptables를 사용하여 트래픽을 표시한 다음 라우팅해야 합니다.
하지만 Wi-Fi를 사용할 때 프로세스/사용자별로 어떻게 라우팅합니까? 어딘가에 가서 다른 Wi-Fi 네트워크에 연결하기 위해 다른 게이트웨이를 사용할 수 있기 때문에 미리 구성된 경로를 가질 수 없습니다. GUI를 사용하여 다른 네트워크에 연결할 때마다 터미널을 엉망으로 만들고 싶지 않습니다. 네트워크 관리자가 추가한 경로를 구문 분석하고 경로를 재구성하는 스크립트를 작성하는 것도 올바른 접근 방식이 아닌 것 같습니다.
그렇다면 인터페이스 독립적 라우팅 게이트웨이 설정이 지정된 인터페이스(wlan0)를 통과하고 다른 모든 사용자가 다른 인터페이스(VPN의 경우 tun)로 이동하도록 하는 가장 좋은 방법은 무엇입니까?
답변1
반대 개념을 사용하여 이를 수행합니다. "직접" 사용자를 제외한 모든 사용자를 VPN으로 라우팅하는 대신 사용자를 WLAN 인터페이스로 연결합니다. VPN 네트워크 IP가 고정되어 있기 때문에
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $f; done
echo 1 > /proc/sys/net/ipv4/route/flush
iptables -t mangle -A OUTPUT -m owner ! --uid-owner direct2net -j MARK --set-mark 42
iptables -t mangle -A OUTPUT -d (vpn ip) -j MARK --set-mark 0
iptables -t nat -A POSTROUTING -m mark --mark 42 -j SNAT --to-source (local ip in vpn's network)
ip rule add fwmark 42 table 42
ip route add default via (vpn network gateway) dev tun0 table 42