web-dev-qa-db-ja.com

pptpとopenvpnで転送するIptables

OpenVPNとPPTPがVPSにインストールされています。しっかりとした答えが得られないように思われる質問がいくつかあります。

OpenVPNを1.1.1.1(eth0、パブリックIPアドレス)にインストールし、PPTP 1.1.1.2(eth0:1、パブリックIPアドレス)にインストールしたい)これはSNATで実現できました。ただし、私が読んでいるすべてのチュートリアルから、ppp +をeth0に、またはその逆に転送することをお勧めします。tunインターフェイスについても同じ状況です。

iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT

私のセットアップはCentOS、専用サーバーです。

何らかの理由で、iptablesがすべてのトラフィックをeth0からtun0にルーティングし、そこで停止すると想定しています。

  1. これらの転送ルールは互いに競合しますか?
  2. 競合を避けるために、代わりにppp +をeth0:1に転送する必要がありますか?それも可能ですか?私はまだ方法を見つけていません。
  3. Iptablesは、これらのルールを介してtunおよびpppに固有のトラフィックをルーティングするのに十分スマートですか?
2
John

私が正しく理解していれば、OpenVPNトンネルとPPTPトンネルが必要です。それぞれがトンネルトラフィックをeth0からルーティングしますが、それぞれに独自のIPがあります。

それが間違っている場合は、明確にしてみてください。できる限りのことをします。しかし、私はこのスクリプトがあなたが求めていることをするだろうと信じています。

#!/bin/bash

# This enables forwarding in the kernel.
echo 1 > /proc/sys/net/ipv4/ip_forward

# This will allow all return traffic to pass back to the originating socket
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# This permits forwarding traffic that came in either tunnel and bound out eth0.
# Note: This does not explicitly permit forwarding between tunnels.
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT

# This blocks all forwarding that is not explicitly permitted.
# Removing this line would be unsafe.
iptables -A FORWARD -j DROP

# These lines will SNAT the traffic coming from each tunnel to the
# appropriate IP address.
iptables -t nat -A POSTROUTING -i tun0 -o eth0 -j SNAT --to-source 1.1.1.1
iptables -t nat -A POSTROUTING -i ppp+ -o eth0 -j SNAT --to-source 1.1.1.2

このスクリプトを複数回実行すると、ルールが構築されます。次のスクリプトは、ファイアウォールルールをフラッシュし、転送を無効にします。通常、これはファイアウォールスクリプトの先頭に含めますが、安全かどうかわからないため、個別に含めました。

#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t filter -F
iptables -t nat -F
2
bahamat