아치 리눅스에서 특정 프로그램이 wireguard를 사용하도록 만드는 방법은 무엇입니까?

아치 리눅스에서 특정 프로그램이 wireguard를 사용하도록 만드는 방법은 무엇입니까?

나는 하나의 프로그램만 내가 저장한 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명령에 전혀 표시되지 않는 단순한 무선 장치만 있다고 가정합니다. 이것을 사용해야 합니다:iwphy0

sudo iw phy phy0 set netns name physical

답변2

  1. 프로그램을 실행하는 프로그램/사용자의 UID를 가져옵니다.

  2. 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 

시작 시 스크립트를 실행하는 시스템 서비스를 만듭니다.

관련 정보