MASQUERADING 없이 Wireguard로 PIVPN을 실행할 수 있나요?

MASQUERADING 없이 Wireguard로 PIVPN을 실행할 수 있나요?

Raspberry Pi에 설치하면 pivpniptables 규칙이 생성됩니다.

pi@RPi64:~ $ sudo iptables -L -t nat                                                                                                      
Chain PREROUTING (policy ACCEPT)                                                                                                                                                                                                             
target     prot opt source               destination                                                                                                                                                                                                                                                                                                                                                                                                                                      

Chain INPUT (policy ACCEPT)                                                                                                                                                                                                                  
target     prot opt source               destination                                                                                                                                                                                                                                                                                                                                                                                                                                      

Chain OUTPUT (policy ACCEPT)                                                                                                                                                                                                                 
target     prot opt source               destination                                                                                                                                                                                                                                                                                                                                                                                                                                      

Chain POSTROUTING (policy ACCEPT)                                                                                                                                                                                                            
target     prot opt source               destination                                                                                                                                                                                         
MASQUERADE  all  --  10.122.242.0/24      anywhere             /* wireguard-nat-rule */    

나는 다음과 같은 규칙을 삽입함으로써 이를 수행한다고 생각합니다 iptables-persistant.

pi@RPi64:~ $ cat /etc/iptables/rules.v4                                                                                                                                                                                                      
# Generated by iptables-save v1.8.7 on Fri Aug 12 08:07:21 2022                                                                                                                                                                              
*nat                                                                                                                                                                                                                                         
:PREROUTING ACCEPT [0:0]                                                                                                                                                                                                                     
:INPUT ACCEPT [0:0]                                                                                                                                                                                                                          
:OUTPUT ACCEPT [0:0]                                                                                                                                                                                                                         
:POSTROUTING ACCEPT [0:0]                                                                                                                                                                                                                    
-A POSTROUTING -s 10.122.242.0/24 -o eth0 -m comment --comment wireguard-nat-rule -j MASQUERADE                                                                                                                                              
COMMIT                                                                                                                                                                                                                                       
# Completed on Fri Aug 12 08:07:21 2022 

물론 이것은 서버 측에 있습니다. 클라이언트에서 이 서버에 완전히 연결하려면 다음과 같은 규칙을 삽입하여 클라이언트에 가장 무도회를 추가해야 합니다.

pi@schwarz:~ $ sudo iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere

나는 이렇게 한다:

pi@schwarz:~ $ sudo cat /etc/wireguard/schwarz.conf                                                                         
[Interface]                                                                                                             
PrivateKey = 
Address = 10.122.242.4/24                                                                                                
PostUp = iptables -t nat -A POSTROUTING -o schwarz -j MASQUERADE                                                        
PreDown = iptables -t nat -D POSTROUTING -o schwarz -j MASQUERADE                                                      
DNS = 9.9.9.9, 149.112.112.112                                                                                                                                                                                                                  
[Peer]                                                                                                                    
...

그런 다음 두 라우터 모두에 정적 경로를 추가하여 해당 LAN의 다른 클라이언트에서 Wireguard 서버 또는 클라이언트로 적절한 LAN으로 트래픽을 라우팅했습니다.

이렇게 하면 두 LAN의 모든 클라이언트에서 두 LAN의 모든 장치에 완전히 연결할 수 있습니다.

이 접근 방식의 문제점은 클라이언트가 원래 LAN에서 원래 IP를 잃고 대신 Wireguard 클라이언트의 IP(+ 포트)를 사용하여 다른 네트워크에 나타난다는 것입니다. 이는 물론 NATing(masquerading) 때문입니다.

이렇게 하면 모든 것이 잘 작동합니다.

단 하나의 서비스는 제외됩니다: Logitechmediaserver. 서버는 이제 동일한 IP를 갖기 때문에 원격 LAN의 모든 클라이언트를 처리할 수 없습니다. 보다 구체적으로 문제는 Logitech 클라이언트(라디오)의 일부일 뿐입니다. 클라이언트가 서버에 제대로 연결되지만 서버 응답이 표시되지 않습니다. 다른 클라이언트(Boom)는 정상적으로 연결됩니다. 그들은 다른 프로토콜을 사용합니다.

pivpnIP가 왜 여전히 스푸핑되고 있는지 궁금합니다 . LAN에서 클라이언트/서버로, 해당 클라이언트/서버에서 생성된 터널로의 고정 경로를 갖는 것만으로는 충분하지 않습니까?

왜 변장합니까? Wireguard 서버가 인터넷의 ISP 라우터 역할도 하는 경우에 이 작업이 수행됩니까? 여기서는 그렇지 않습니다. 라우터는 항상 다른 시스템에 있습니다.

간단히 말해서 삭제가 일반적으로 가능한지 궁금합니다 pivpn.또한 누군가가 내 설정에 무엇이 잘못되었는지 지적할 수도 있습니다.

답변1

매스커레이드는 첫 번째 네트워크가 두 번째 네트워크로 응답을 다시 라우팅하도록 설정되지 않은 두 번째 네트워크에서 하나의 네트워크에 액세스하는 데 종종 사용됩니다. 게이트웨이에서 첫 번째 네트워크로 패킷을 가장하여(게이트웨이의 주소를 사용하도록 패킷의 소스 주소를 다시 작성) 해당 네트워크의 다른 호스트가 게이트웨이에 응답하도록(이로 인해 원래 소스로 다시 변환된 응답 패킷의 대상이 변경됨) 주소).

두 개의 LAN을 연결하고 각 LAN이 자체 WireGuard 게이트웨이(전통적인 사이트 간 WireGuard 구성)를 통해 다른 LAN으로 라우팅되도록 설정된 경우 매스커레이딩이 필요하지 않습니다.

인터넷에 연결된 LAN(또는 WireGuard 네트워크)이 있는 경우(예:경로인터넷은 뿐만 아니라터널을 통과하다인터넷).

사이트 간 연결의 경우 각 LAN의 LAN 라우터가 WireGuard 게이트웨이이기도 하면 일반적으로 가장이 사용되지 않습니다. 일반적으로 각 LAN 라우터에 WireGuard 인터페이스를 설정하고 AllowedIPs다른 LAN에 대한 라우팅(및 적절한 설정)을 제공하기 만 하면 됩니다. 한 사이트에서 다른 사이트로의 적절한 액세스를 허용하도록 라우터에 방화벽 규칙을 추가합니다.

귀하의 경우 각 사이트에 LAN 라우터와 다른 게이트웨이(Pi)가 있는 것처럼 들립니다. 1) 각 LAN 라우터(또는 이를 수행하는 각 개별 장치에 다른 사이트에 대한 경로를 추가하면 매스커레이딩의 필요성을 제거할 수 있습니다. 다른 사이트에 액세스해야 함), 2) 다른 사이트의 LAN 네트워크를 AllowedIPsWireGuard 게이트웨이의 설정에 추가합니다.

이미 이 작업을 수행하고 있는 것처럼 들리지만 구체적인 예를 들자면 10.100.100.0/24 및 10.200.200.0/24라는 두 개의 LAN을 연결하고 LAN 1의 WireGuard 게이트웨이는 LAN 2의 10.100.100.123입니다. WireGuard 게이트웨이가 10.200.200.234인 경우 다음과 같이 LAN 1의 LAN 라우터(또는 개별 장치)에 경로를 추가합니다(라우터 또는 장치의 적절한 LAN 연결 인터페이스(예: eth1) 사용).

10.200.200.0/24 via 10.100.100.123 dev eth1

그리고 LAN 2의 LAN 라우터(또는 개별 장치)에 대한 해당 경로는 다음과 같습니다.

10.100.100.0/24 via 10.200.200.234 dev eth1

LAN 1에 대한 WireGuard 구성에서는 AllowedIPs다른 사이트의 설정에 다른 사이트의 네트워크를 포함할 수 있습니다.

[Interface]
Address = 10.122.242.1/24
...

[Peer]
AllowedIPs = 10.122.242.2, 10.200.200.0/24
...

AllowedIPs이에 따라 LAN 2의 WireGuard 구성에서 LAN 1의 설정 에 LAN 1의 네트워크를 포함할 수 있습니다 .

[Interface]
Address = 10.122.242.2/24
...

[Peer]
AllowedIPs = 10.122.242.1, 10.100.100.0/24
...

이 구성을 완료하면 WireGuard 게이트웨이에서 가장 규칙을 안전하게 제거하고 NAT 없이 한 사이트에서 다른 사이트로 트래픽을 라우팅할 수 있습니다.

그러나 여전히 WireGuard 게이트웨이 중 하나를 인터넷 게이트웨이로 사용하려는 경우 가장 규칙을 유지할 수 있지만 예를 들어 LAN 2용 WireGuard 게이트웨이에서 다음과 같이 게이트웨이 자체 LAN으로 향하는 패킷에 대해서는 예외를 만들 수 있습니다. 표시:

iptables -t nat -A POSTROUTING ! -d 10.200.200.0/24 -o eth0 -J MASQUERADE

DNS게시한 WireGuard 구성에 대한 사소한 질문: 사이트 간 구성에 이 설정을 포함하고 싶지 않을 것입니다 . 일반적으로 DNS끝점의 WireGuard 인터페이스가 작동 중이거나 작동 중지될 때 다른 DNS 확인자가 사용되도록 지점 및 사이트 간 구성의 "지점" 측 설정 만 사용합니다 .

관련 정보