Wireguard를 통해 한 사용자의 트래픽을 어떻게 라우팅합니까?

Wireguard를 통해 한 사용자의 트래픽을 어떻게 라우팅합니까?

VPN 회사에서 제공하는 Wireguard 구성을 사용하십시오.

수정방법 iptableswg0.confvpnWireguard의 인터페이스 wg0을 통해서만 사용자의 트래픽을 라우팅합니다., 다른 모든 흐름을 변경하지 않고 유지하시겠습니까?

댓글과 답변에 대한 반응

제안된 명령(Hauke ​​Laging 제공)을 PostUp스크립트 로 실행할 때 wg0.conf사용자가 wg0 인터페이스를 통해 트래픽을 전송하지만 여전히 인터넷에 액세스할 수 없는 이유는 무엇입니까?

#!/bin/sh
# up.sh

iptables -t mangle -nvL OUTPUT | grep -q 0x2a ||
    iptables -t mangle -A OUTPUT -m owner --uid-owner test -j MARK --set-mark 42

grep -q '^42  vpn$' /etc/iproute2/rt_tables ||
    echo '42  vpn' >>/etc/iproute2/rt_tables

ip route show table vpn | grep -q default ||
    ip route add default via 10.66.95.98 dev wg0 table vpn

ip rule | grep -q 0x2a ||
    ip rule add fwmark 42 lookup vpn prio 42

현재 구성 wg0.conf은 다음과 같습니다.

[Interface]
PrivateKey = <Hidden>
Address = 10.66.95.98/32,fc00:bbbb:bbbb:bb01::3:5f61/128
DNS = <DNS>
Table = off
PostUp = up.sh

#Following 2 lines added in attempt to allow local traffic 
PreUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PreDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE

[Peer]
PublicKey = <Hidden>
AllowedIPs = 0.0.0.0/0,::0/0
Endpoint = 185.65.135.224:51820

ip route다음 출력을 반환합니다.

default via 192.168.1.1 dev enp2s0 proto dhcp metric 100 
169.254.0.0/16 dev enp2s0 scope link metric 1000 
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.2 metric 100 

ip route show table vpn출력을 반환

default via 10.66.95.98 dev wg0 

ip rule반품

0:  from all lookup local
42: from all fwmark 0x2a lookup vpn
32766:  from all lookup main
32767:  from all lookup default

iptables -t nvL반품

Chain PREROUTING (policy ACCEPT 5465 packets, 1114K bytes)
 pkts bytes target     prot opt in     out     source               destination         
 2829  671K CONNMARK   udp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* wg-quick(8) rule for wg0 */ CONNMARK restore

Chain INPUT (policy ACCEPT 5450 packets, 1113K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 5786 packets, 1203K bytes)
 pkts bytes target     prot opt in     out     source               destination         
  961 1123K RETURN     all  --  *      *       0.0.0.0/0            192.168.1.0/24       owner UID match 1002
 261M  414G MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0            owner UID match 1002 MARK set 0x2a
  156 56019 RETURN     all  --  *      *       0.0.0.0/0            192.168.1.0/24       owner UID match 1002
 261M  414G MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0            owner UID match 1002 MARK set 0x2a
   77 48572 MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0            owner UID match 1002 MARK set 0x2a

Chain POSTROUTING (policy ACCEPT 6507 packets, 1310K bytes)
 pkts bytes target     prot opt in     out     source               destination         
 1281  209K CONNMARK   udp  --  *      *       0.0.0.0/0            0.0.0.0/0            mark match 0xca6c /* wg-quick(8) rule for wg0 */ CONNMARK save

실행하면 tcpdump -i wg0 -n다음 ping google.se이 반환됩니다.

17:48:43.496475 IP 192.168.1.2.33044 > 185.65.135.224.51820: UDP, length 1184

데이터 패킷이 wg0 인터페이스에 도착했음을 나타냅니다. 그러나 핑을 실행해도 결과가 나오지 않습니다.

110 packets transmitted, 0 received, 100% packet loss, time 111603ms

답변1

당신은 이것을 할 수 있습니다

  1. iptable모듈을 사용하여 owner이러한 패킷을 감지합니다.
  2. 사용 iptable대상은 MARK패킷 태그를 아직 사용되지 않은 값으로 설정합니다.
  3. VPN 인터페이스를 통해 모든 트래픽을 보내려면 추가 라우팅 테이블을 만듭니다.
  4. 정책 라우팅을 사용하여 ip rule태그가 지정된 패킷에 대한 특수 라우팅 테이블 선택
iptables -t mangle -nvL OUTPUT | grep -q 0x2a ||
    iptables -t mangle -A OUTPUT -m owner --uid-owner test -j MARK --set-mark 42

grep -q '^42  vpn$' /etc/iproute2/rt_tables ||
    echo '42  vpn' >>/etc/iproute2/rt_tables

ip route show table vpn | grep -q default ||
    ip route add default via 10.66.95.98 dev wg0 table vpn

ip rule | grep -q 0x2a ||
    ip rule add fwmark 42 lookup vpn prio 42

관련 정보