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 を使用できるようにすることという 2 つのことを実現しようとしています。

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 と一致させる必要があります。そうしないと、そのポート番号で他の接続がキャッチされてしまいます。
  • すべての接続を 10.8.0.1 に NAT すると、すべてのクライアントがこの IP を介してトラフィックをルーティングするため、問題が発生する可能性があります。

答え2

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

あなたが探しているのはそれです:)

私自身も同じ問題を経験しました

ccdファイルを使用して静的内部IPをプッシュしていると思いますか?そうであれば、上記のルールをiptablesに編集すると機能するはずです。

関連情報