VPN 회사에서 제공하는 Wireguard 구성을 사용하십시오.
수정방법 iptables
및wg0.conf
vpn
Wireguard의 인터페이스 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
당신은 이것을 할 수 있습니다
iptable
모듈을 사용하여owner
이러한 패킷을 감지합니다.- 사용
iptable
대상은MARK
패킷 태그를 아직 사용되지 않은 값으로 설정합니다. - VPN 인터페이스를 통해 모든 트래픽을 보내려면 추가 라우팅 테이블을 만듭니다.
- 정책 라우팅을 사용하여
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