Linux에서 VPN을 통해 특정 사용자의 트래픽을 라우팅하는 방법

Linux에서 VPN을 통해 특정 사용자의 트래픽을 라우팅하는 방법

내 사용자 계정 중 하나의 모든 트래픽이 VPN 연결을 통해 라우팅될 수 있도록 설정을 조정하려고 합니다. 지금까지 나는 이것을 달성하지 못했습니다.

운영 체제: Fedora27

Network Manager GUI를 통해 VPN에 연결된 경우(모든 트래픽이 VPN을 통과하며 VPN이 작동함) $ip 라우팅:

default via 10.5.0.1 dev tun0 proto static metric 50 
default via 192.168.0.1 dev enp0s3 proto static metric 100 
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.15 metric 100 
10.5.0.0/16 dev tun0 proto kernel scope link src 10.5.1.112 metric 50 
$VPNIP via 192.168.0.1 dev enp0s3 proto static metric 100

내가 취한 단계(이 문서에서는 VPN IP를 $VPNIP로 대체함):

  1. 두 번째 사용자 계정 $user2(UID 1001) 만들기

  2. 두 번째 라우팅 테이블을 만듭니다.

    echo 100 vpn >> /etc/iproute2/rt_tables

  3. VPN을 통해 모든 트래픽을 전달하지 않도록 기본 경로 테이블을 설정합니다.

    nmcli connection modify VPN ipv4.never-default true

  4. $user2의 패킷을 표시하도록 iptables를 설정합니다.

    *nat
    : 라우팅 전 승인 [0:0]
    : 입력 승인 [0:0]
    : 출력 승인 [3:180]
    : POSTROUTING 승인 [3:180]
    -A POSTROUTING -m mark --mark 0xb -j MASQUERADE
    COMMIT

    *mangle
    : 라우팅 전 승인 [903:366886]
    : 입력 승인 [903:366886]
    : 전달 승인 [0:0]
    : 출력 승인 [872:617897]
    : 라우팅 후 승인 [872:617897]
    -A 출력 - m all by --uid-owner1001 -j mark --set-xmark 0xb/0xffffffff
    커밋

    *filter
    :INPUT DROP [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT DROP [0:0]
    # lo
    -A INPUT -i lo -j ACCEPT
    -A OUTPUT -o lo -j ACCEPT
    # 생성 허용
    -A INPUT -m state --state ESTABLISHED -j ACCEPT
    # VPN 허용
    -A OUTPUT -mowner --uid-owner 0 -d $VPNIP -p tcp --dport 443 -j ACCEPT
    # VPN 허용
    -A OUTPUT - o tun0 -m 소유자 --uid-owner 0 -d 10.5.0.1 -p udp --dport 53 -j 수락
    -A 출력 -o tun0 -m 소유자 --uid-owner 1001 10.5.0.1 -p udp -- dport 53 -j 수락
    # VPN http 허용
    -A 출력 -o tun0 -m 소유자 --uid-owner 1001 -p tcp --dport 80 -j 수락
    -A 출력 -o tun0 -m 소유자 --uid-owner 1001 -p tcp --dport 443 -j 수락
    # ssh
    -A 입력 허용 -i enp0s3 -p tcp --dport 22 -j 수락
    -A 출력 -o enp0s3 -p tcp --sport 22 -j 수락
    제출

  5. 테이블 100을 통해 라우팅되도록 태그가 지정된 패킷을 설정하는 IP 규칙을 추가합니다.

    ip rule add fwmark 11 table 100

  6. 작동 중인 기본 경로의 모든 행을 테이블 100에 복사합니다.

    ip route add default via 10.5.0.1 dev tun0 proto static metric 50 table 100 ip route add default via 192.168.0.1 dev enp0s3 proto static metric 100 table 100 ip route add 192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.15 metric 100 table 100 ip route add 10.5.0.0/16 dev tun0 proto kernel scope link src 10.5.1.112 metric 50 table 100 ip route add $VPNIP via 192.168.0.1 dev enp0s3 proto static metric 100 table 100

문제: 작동하지 않고 경로가 지속되지 않는 것 같습니다. 도움을 주시면 대단히 감사하겠습니다!

관련 정보