Iptables를 사용하여 SNAT 또는 DNAT에 대한 openvpn 포트 전달?

Iptables를 사용하여 SNAT 또는 DNAT에 대한 openvpn 포트 전달?

나는 openvpn 설정을 얻고 클라이언트에 고정 내부 IP를 발급하도록 관리했습니다. 이제 내가 가진 문제는 클라이언트당 열린 포트를 할당하려고 한다는 것입니다. 이제 고정 내부 IP가 있으므로 규칙을 쉽게 추가할 수 있습니다. 문제가 발생하는 부분은 iptables를 통해 이 작업을 올바르게 수행하는 방법입니다.

클라이언트가 푸시한 내부 고정 IP 10.8.0.10 예는 포트 1234를 전달하는 것입니다.

나는 운 좋게 이것을 시도했지만 VPN은 udp와 포트 1194를 사용하지만 udp와 tcp 및 둘 다로 수정된 아래 규칙을 시도했습니다. VPN은 이미 작동하고 가장 무도회 규칙을 가지고 있지만 그 외에는 iptables가 비어 있습니다.

iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 10.8.0.10
iptables -A FORWARD -s 10.8.0.10 -p tcp --dport 1234 -j ACCEPT

또한 10.8.0.1은 게이트웨이로, 10.8.0.10은 모든 포트 전달이 필요한 클라이언트로 사용해 보았습니다.

iptables -t nat -A PREROUTING -d 10.8.0.1 -j DNAT --to-destination 10.8.0.10

먼저 클라이언트당 포트를 전달할 수 있는 두 가지 작업을 수행하고 필요한 경우 모든 포트를 전달해야 하는 경우 정적 공용 IP를 수행하려고 합니다.

openvpn 서버.conf

local 123.123.123.123 #- your_server_ip goes here
port 1194 #- port
proto udp #- protocol
client-config-dir /etc/openvpn/ccd
push "route 10.8.0.0 255.255.0.0"
ifconfig-pool-persist /etc/openvpn/openvpn.dhcp 30
dev tun
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
plugin /etc/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf
client-cert-not-required
username-as-common-name
server 10.8.0.0 255.255.255.0
push redirect-gateway def1
push dhcp-option DNS 8.8.8.8
push dhcp-option DNS 8.8.4.4
keepalive 5 30
comp-lzo
persist-key
persist-tun
status 1194.log
verb 3

iptables-save:

# Generated by iptables-save v1.3.5 on Sun Aug 26 14:27:12 2012
*nat
:PREROUTING ACCEPT [4834:503608]
:POSTROUTING ACCEPT [1000:70847]
:OUTPUT ACCEPT [1000:70847]
-A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
COMMIT
# Completed on Sun Aug 26 14:27:12 2012
# Generated by iptables-save v1.3.5 on Sun Aug 26 14:27:12 2012
*filter
:INPUT ACCEPT [21545:23742094]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [14867:1938275]
COMMIT
# Completed on Sun Aug 26 14:27:12 2012

답변1

나에게는 잘 작동합니다. 확인해야 할 몇 가지 사항:

  • 이는 VPN 서버 자체에서 이루어진 NAT 연결이 아닙니다. 이를 위해서는 OUTPUT 체인에 규칙이 필요합니다.
  • 클라이언트가 라우팅하도록 구성되어 있습니까?모두VPN을 통한 트래픽? 그렇지 않은 경우 응답 패킷이 VPN을 통해 다시 전송되지 않는 것을 확인할 수 있습니다.
  • 해당 클라이언트의 지점 간 연결에서 서버 측이 아닌 클라이언트 측 IP 주소를 사용하고 있습니까?
  • 규칙에서 특정 대상 IP를 일치시키려는 경우 그렇지 않으면 해당 포트 번호에서 다른 연결을 발견하게 됩니다.
  • 모든 클라이언트가 이 IP를 통해 트래픽을 라우팅하므로 10.8.0.1에 대한 모든 연결을 NAT하면 문제가 발생할 수 있습니다.

답변2

-A  PREROUTING -p tcp -m tcp --dport 1234 -j DNAT --to-destination 10.8.0.10

이것이 바로 당신이 찾고 있는 것입니다 :)

나 자신도 같은 문제를 겪었어

고정 내부 IP를 푸시하기 위해 ccd 파일을 사용하고 있다고 가정합니까? 그렇다면 iptables를 편집할 때 위의 규칙이 작동해야 합니다.

관련 정보