나는 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를 편집할 때 위의 규칙이 작동해야 합니다.