나는 하나의 프로그램만 내가 저장한 wireguard 구성을 통해 실행 /etc/wireguard/config.conf
하고 다른 모든 프로그램은 일반 IP 주소를 통해 실행하기를 원합니다.
찾았어요Wireguard의 이 페이지는 라우팅을 위한 페이지입니다., 네임스페이스 사용을 제안하지만 다음과 같은 특정 명령을 실행하려고 하면
sudo ip link set wlp2s0 netns physical
RTNETLINK answers: Invalid argument
아치 리눅스에서는 이 작업을 수행할 수 없는 것이 좋습니다. Wireguard를 통해 특정 프로그램을 실행하는 방법을 찾은 사람이 있습니까?
다른 컴퓨터에서 위의 튜토리얼을 시도했는데 Wireguard 구성을 로드하려고 할 때 다음 오류가 발생했습니다.
wg setconf wgvpn0 /etc/wireguard/my_vpn.conf
: 형식이 잘못되었지만 동일한 구성을 사용하면 완벽하게 작동합니다.wg-quick up
그런데, Wireguard의 문제 추적 시스템에 대해 아는 사람이 있습니까? 내가 메일링 리스트에 제출한 질문은 공개되지 않습니다.
답변1
~에서OP의 질문에 wireguard.com 링크가 제공됩니다.,특히나새로운 네임스페이스 솔루션, 이더넷과 무선을 예로 들어 물리적 인터페이스를 이동하는 방법을 설명합니다.
# ip netns add physical
eth0
이제 " 물리적" 네임스페이스를 입력합니다wlan0
.# ip link set eth0 netns physical # iw phy phy0 set netns name physical
(무선 장치 는
iw
지정된 물리적 장치를 사용하여 이동해야 합니다phy0
.)
언급한 대로 OP는 첫 번째 ip link set ... netns
명령을 읽는 것처럼 보이지만 무선 장치에 두 번째 명령이 필요하다는 사실은 인식하지 못합니다.
iw
매뉴얼 페이지부족하지만 다음 iw --help
이 포함됩니다:
phy <phyname> set netns { <pid> | name <nsname> } Put this wireless device into a different network namespace: <pid> - change network namespace by process id <nsname> - change network namespace by name from /run/netns or by absolute path (man ip-netns)
일부 드라이버는 아직 네트워크 네임스페이스와 호환되지 않을 수 있습니다. 작동하려면 다음 출력이 필요합니다.
$ sudo iw phy0 info|grep netns
* set_wiphy_netns
대응 장치를 통해 처리되므로 wlp2s0
명령에 전혀 표시되지 않는 단순한 무선 장치만 있다고 가정합니다. 이것을 사용해야 합니다:iw
phy0
sudo iw phy phy0 set netns name physical
답변2
프로그램을 실행하는 프로그램/사용자의 UID를 가져옵니다.
Wireguard 터널로 보내는 데 사용됩니다
iptables
.
[편집] 예를 들어 여기서는 exemple_app(원하는 프로그램으로 대체) 트래픽을 tor(내 프로젝트 중 하나에서 가져온 것)로 리디렉션하고 있습니다. 몇 가지 사항을 변경하고 트래픽을 Wireguard 터널로 리디렉션하세요(인터넷에 많은 예가 있습니다).
#!/bin/sh
# Vars
_trans_port="9040"
_dns_port="5353"
_exemple_app_uid=`id -u exemple_app`
#_tor_uid=`id -u debian-tor`
#_resv_iana="0.0.0.0/8 100.64.0.0/10 169.254.0.0/16 192.0.0.0/24 192.0.2.0/24 192.88.99.0/24 198.18.0.0/15 198.51.100.0/24 203.0.113.0/24 224.0.0.0/4 240.0.0.0/4 255.255.255.255/32"
#_non_tor="127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16"
_out_if="wlan0"
_gateway="192.168.1.1"
_local_network="192.168.1.0/24"
# Remove all the iptables rules
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Set up the policies
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP
# Redirect trafic through Tor
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner $_exemple_app_uid -m tcp -j REDIRECT --to-ports $_trans_port
# redirect DNS requests through Tor
iptables -t nat -A OUTPUT -p udp -m owner --uid-owner $_exemple_app_uid -m udp --dport 53 -j REDIRECT --to-ports $_dns_port
# Drop the rest
iptables -A OUTPUT -p tcp -m owner --uid-owner $_exemple_app_uid -j LOG --log-prefix "[exemple_app tcp drop] " --log-level 7 --log-uid
iptables -A OUTPUT -m owner --uid-owner $_exemple_app_uid -j DROP
시작 시 스크립트를 실행하는 시스템 서비스를 만듭니다.