Wireguard를 시작한 후 공용 IP를 사용하여 서버의 서비스에 액세스할 수 없습니다.

Wireguard를 시작한 후 공용 IP를 사용하여 서버의 서비스에 액세스할 수 없습니다.

Debain 서버를 Wireguard 클라이언트로 설정하면 더 이상 로컬 네트워크 외부에서(공용 IP를 사용하여) 서버에서 실행되는 서비스에 연결할 수 없습니다. 로컬 네트워크에서 Wireguard 연결을 중지하면 모든 것이 잘 작동합니다. tcpdump 로그는 요청이 모두 서버에 도착했음을 보여줍니다.

wg0.conf:

[Interface]
PrivateKey = ...
Address = 100.64.67.64/32
DNS = 127.0.0.1

[Peer]
PublicKey = ...
AllowedIPs = 0.0.0.0/0
Endpoint = ...
PresharedKey = ...

wg-quick up wg0:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 100.64.67.64/32 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n

ip -4 rule show table 51820:

32765:  not from all fwmark 0xca6c lookup 51820

wg-quick down wg0:

[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
[#] resolvconf -d wg0 -f
[#] iptables-restore -n

답변1

나는 그것에 대해 생각했다. 물론 문제는 요청이 eth0으로 이동하지만 응답은 Wireguard 터널(wg1)을 통해 전송되고 다른 IP를 사용하여 클라이언트에 도달한다는 것입니다.

Request: Client -> Internet -> Router [NAT] -> Server  
Response: Server -> Router [NAT] -> Internet -> VPN Provider [NAT] -> Internet -> Client

따라서 이러한 경우 규칙을 추가하여 기본 라우팅 테이블을 사용하여 VPN 터널을 우회해야 합니다.

ip rule add from <interface IP> lookup main

예:

$ ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:ed:fc:a5:65 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.2/24 brd 192.168.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever

$ ip rule add from 192.168.0.2 lookup main

$ ip route show table main
default via 192.168.0.1 dev eth0 src 192.168.0.2 metric 202
192.168.0.0/24 dev eth0 proto dhcp scope link src 192.168.0.2 metric 202

$ ip rule show
0:      from all lookup local
32756:  from 192.168.178.2 lookup main
32761:  from all lookup main suppress_prefixlength 0
32762:  not from all fwmark 0xca6c lookup 51820
32766:  from all lookup main
32767:  from all lookup default

내 경우에는 로컬 네트워크 외부에서 접근하고자 하는 서비스가 Wireguard 서버였다. Wireguard 클라이언트가 로컬 네트워크 및 인터넷에 액세스하려면 다음 규칙도 추가해야 합니다.

ip rule add from <Wireguard IP range> lookup main

예:

$ ip a
11: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.6.0.1/24 scope global wg0
   valid_lft forever preferred_lft forever

$ ip rule add from 10.6.0.1/24 lookup main

관련 정보