이것은 사소한 질문처럼 보이지만 아직 답을 찾지 못했습니다.
내 LAN(그림의 파란색)에는 NAS와 Raspberry Pi 등이 있습니다. Raspberry Pi에 OpenVPN 서버를 설치했습니다. OpenVPN 클라이언트가 NAS, 즉 FTP, HTTP 등에 액세스할 수 있기를 바랍니다. 클라이언트는 Raspberry 및 NAS 자체 이외의 다른 시스템에 액세스할 수 없어야 합니다.
이 그림에는 내 네트워크 토폴로지가 있습니다.
OpenVPN 클라이언트를 해당 서버에 연결할 수 있습니다. 서브넷 충돌이 있다는 것을 알고 있지만 서브넷을 변경할 수 없습니다.
내 서버 구성:
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/myserver.crt
key /etc/openvpn/easy-rsa/keys/myserver.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
#push "route 192.168.1.0 255.255.255.0"
ifconfig-pool-persist /etc/openvpn/easy-rsa/ipp.txt
keepalive 10 120
cipher AES-128-CBC
persist-key
persist-tun
status /var/log/openvpn-status.log
#log /var/log/openvpn.log
log-append /var/log/openvpn.log
verb 3
내 클라이언트 구성 파일:
client
remote x.y.z.t 1194
proto udp
dev tun
ca /etc/openvpnclient/ca.crt
cert /etc/openvpnclient/client.crt
key /etc/openvpnclient/client.key
cipher AES-128-CBC
#route-method exe
#route-delay 3
#route 10.8.0.0 255.255.255.0
###route-nopull
route 192.168.1.20 255.255.255.255
resolv-retry infinite
nobind
persist-key
persist-tun
mute 20
verb 3
Windows 클라이언트를 사용하여 연결할 수 있지만 NAS에 ping을 보내거나 액세스할 수 없습니다. 나는 아직도 뭔가를 놓치고 있다고 확신하지만 어떻게 트래픽을 라우팅할 수 있는지 알 수 없었습니다. 나는 그 주제에 관한 많은 주제를 읽었지만 여전히 운이 좋지 않습니다.
필요한 경우 OpenVPN 서버 네트워크에 있는 라우터에 라우팅 규칙을 추가할 수 있어야 합니다.
업데이트 2019/11/18 @17.31 CET
두 가지 주요 요구 사항이 있습니다.- NAS에 연결하려면 클라이언트가 필요하지만 LAN의 다른 시스템에는 연결되지 않습니다.
- 클라이언트의 서브넷이 NAS 서브넷(예: 192.168.1.0/24)과 충돌하는 경우에도 연결할 수 있어야 합니다.
톰 얀과이 기사첫 번째 문제에 대한 해결책을 찾는 데 도움이 되었습니다. 나는 두 번째 문제가 아직 밝혀지지 않았다고 생각합니다.
문제 #1에 대한 해결 방법:
서버 구성에서 OpenVPN 클라이언트의 요청을 NAS로 라우팅하려면 다음 줄을 추가(주석 해제)해야 했습니다.
push "route 192.168.1.0 255.255.255.0"
NAS에서 OpenVPN 클라이언트로 다시 라우팅을 활성화하기 위해 이 라우팅 규칙을 추가했습니다.NAS에서:
vi /etc/sysconfig/network-scripts/route-eth0
해당 (빈) 구성 파일에 다음 줄을 추가합니다.
10.8.0.0/24 via 192.168.1.88
그리고 service network restart
정적 경로가 적용되도록 보장했습니다.
그 후 트래픽을 제한했습니다.라즈베리 파이에서iptables를 통해 실제로 영구 설치 iptables-persistent
및 팔로우를 만들었습니다.이 가이드.
iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -d 192.168.1.20 -j ACCEPT
업데이트 #2
예, 연결하려면 많은 클라이언트가 필요하며 이러한 이유로 NAT 및 위장을 피해야 한다고 생각합니다.답변1
10.8.0.0/24
(게이트웨이가 있는 위치 192.168.1.88
, 즉 Rasp.Pi
OVPN 서버) 에 대한 경로를 NAS
또는 ROUTER
( 물론 이 경우 ROUTER
기본 게이트웨이로 가정)에 추가해야 /가 응답 트래픽을 어디로 보낼지 알 수 있습니다.NAS
NAS
ROUTER
그렇게 할 수 없는 경우 VPN 클라이언트의 모든 트래픽이 서버에서 발생한 것처럼 보이도록 SNAT
/ MASQUERADE
with iptables
(또는 nftables
물론) 를 설정해야 합니다 .Rasp.Pi
클라이언트는 Raspberry 및 NAS 자체 이외의 다른 컴퓨터에 액세스할 수 없어야 합니다.
를 사용하여 전달 트래픽을 제한하십시오 iptables
. IP 전달을 활성화하면 Rasp.Pi
(그렇지 않으면 VPN 클라이언트가 해당 LAN에 연결할 수 없음) 클라이언트는 서버 LAN의 특정 호스트에 도달하는 데 필요한 모든 경로를 추가할 수 있습니다. 특정 경로를 추진하는 것은 이를 달성하는 데 도움이 되지 않습니다.
업데이트:
IP 전달을 활성화하려면(그리고 부팅 시 설정을 유지하려면):
sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
이 경우 필요한 전달만 허용하려면 다음을 수행 eth0
하십시오 tun0
.
iptables -F FORWARD
iptables -P FORWARD DROP
iptables -A FORWARD -m conntrack --ctstate NEW -i tun0 -s 10.8.0.0/24 -o eth0 -d 192.168.1.20 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
다음을 통해 나가는 트래픽 전달을 위해 소스 NAT를 수행하려면( NAS
/ 에서 반환 경로를 구성할 필요가 없도록 ) 다음을 수행합니다 .ROUTER
eth0
iptables -t nat -F POSTROUTING
(체인에 필요한 다른 규칙이 있는 경우 위의 내용을 건너뛰세요)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
또는, IP가 eth0
시간/부팅 후에도 지속되는 경우:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT 192.168.1.88
PS 만진 테이블을 플러시하려면 다음을 수행할 수 있습니다.
for i in $(cat /proc/net/ip_tables_names); do iptables-restore /usr/share/iptables/empty-"$i".rules; done
또한 iptables
명령은 부팅 시 지속되지 않으므로 규칙을 파일에 저장하고 iptables-save
부팅 시 어떤 방법으로든 복원하도록 시스템을 구성하는 것이 좋습니다.
업데이트 2:
FORWARD
체인을 올바르게 구성하는 방법에 대해서는 위의 내용(표 참조 ) 을 실제로 확인해야 합니다 filter
. 정책(또는 마지막에 DROP
"기본" 규칙) 이 없으면 모든 규칙은 쓸모가 없습니다. (일단 부품을 고치면 규칙만으로는 충분하지 않습니다 )DROP
ACCEPT
DROP
서브넷(보다 정확하게는 경로) 충돌을 방지하려면 서브넷 경로 대신 호스트 경로(어차피 필요한 것임)를 푸시하는 것이 가장 좋습니다. 따라서 push "route 192.168.1.20 255.255.255.255"
서브넷 마스크는 실제로 생략할 수 있습니다. 클라이언트 호스트는 LAN 호스트(기본 게이트웨이 제외)에 대한 호스트 경로가 훨씬 낮습니다(주소가 아닌 주소가 /32
인터페이스에 할당되면 Linux에서 서브넷 경로가 항상 추가됩니다).
예를 들어 클라이언트에 경로가 이미 존재하는 특수한 경우에 대해 대상을 on 으로 push "route 10.8.1.1"
설정할 수도 있습니다(그러면 여전히 를 사용하여 액세스할 수 있어야 합니다 ).DNAT
192.168.1.20
Rasp.Pi
192.168.1.20
NAS
10.8.1.1
iptables -t nat -A PREROUTING -d 10.8.1.1 -j DNAT --to-destination 192.168.1.20