web-dev-qa-db-ja.com

AmazonEC2でのOpenVPNサーバーのルーティング設定

ここのソフトウェア開発者は、Amazon EC2にOpenVPNサーバーをセットアップして、そこにあるすべての内部リソースにアクセスすることにより、sysadmin-fooを起動して実行しようとしています。これが私が新しいUbuntu12.04 CanonicalAMIでそれをどのように想像するかです:

   Local network          /        EC2 Cloud, 10.*.*.*/255.0.0.0
  172.16.20.*/          ,'
     255.255.255.0     ,'                +-----------------+
                      .'                 |Amazon DNS server|
                      |                ,'|  172.16.0.23    |
 +---------------+   |               ,'  +-----------------+
 | Workstation   |   |             ,'
 |               XXX |   +-------,'------+
 | 172.16.20.1   |  XXXX | OpenVPN server|
 +------`.-------+   \  XX  10.23.45.67  `-.  +-------------+
          \          '.  +---------------+  `-. Second server
  +--------`.---+     |                       | 10.23.45.68 |
  |Local server |      \                      +-------------+
  | 172.16.20.2 |       \
  +-------------+        \

クライアントは(iPhoneでも)VPNに接続できますが、確認する必要のあるサブシステムの全体像を把握するのに問題があります。

セットアップの目標は次のとおりです。

  • VPNクライアントはVPN経由で内部リソースにアクセスできる必要があり、インターネットの残りの部分はローカルゲートウェイ経由でルーティングされる必要があります
  • VPNクライアントは、OpenVPNサーバーがアクセスできるすべてのサーバーにアクセスできる必要があります
  • VPNクライアントは172.16.0.23にあるAmazonDNSサーバーをプライマリDNSサーバーとして使用する必要があります。そのサーバーはAmazonが生成したホスト名を内部IPアドレスに解決するためです(つまり、ec2-45-67-8-9.eu-west-1.compute.amazonaws.comはそれによって解決されると10.23.45.67に解決されますサーバーですが、他のすべての場所で45.67.8.9に)
  • VPNクライアントはお互いを見る必要があります

/etc/openvpn/server.confを構成した方法は次のとおりです(興味深い部分だけですが、願っています)。

persist-tun
server 172.16.10.0 255.255.255.0
Push "route-gateway 172.16.10.1"
Push "route 10.0.0.0 255.0.0.0"

Push "route 172.16.0.23"
Push "dhcp-option DNS 172.16.0.23"

ただし、openvpnサーバーがこれらのどの部分を実行するのかわかりません。

  • サーバーでiptablesを構成する必要がありますか?もしそうなら、どのように?
  • サーバーにルートを設定する必要がありますか(クライアントにプッシュされるルート以外)?もしそうなら、どのように?
  • クライアントが正常に接続できない原因となる、他にどのようなネットワークソフトウェアがありませんか?
5
peritus

カーネル内のOpenVPNサーバーで転送を有効にする必要があります(/proc/sys/net/ipv4/ip_forward)そして、ファイアウォール(iptables)での転送をグローバルにまたは選択的に許可する必要があります。例:

# there is probably already a rule allowing all established connections
# iptables -A FORWARD -m conntrack --ctstate ESTABLISHED -j ACCEPT
# the next rules for every OpenVPN interface (or once for the respective address block)
iptables -A FORWARD -i tun0 -d 10.0.0.0/8  -j ACCEPT
iptables -A FORWARD -i tun0 -d 172.16.0.23 -j ACCEPT
# if the local network shall be accessible
# iptables -A FORWARD -i tun0 -d 172.16.20.0/24 -j ACCEPT

単純なクライアントだけが接続する場合は、サーバーにルートを設定する必要はありません。 172.16.20.1がローカルネットワークのゲートウェイとして接続する場合は、172.16.20.0/24のルートが必要ですが、それはおそらく(そして最良の)172.16.20.1のOpenVPN構成で設定されています。

編集1

特定のシステムでルーティングを構成できず、そのルーティングでトラフィックが正しい方法で返送されない場合は、NAT(より正確には:SNAT):

iptables -t nat -A POSTROUTING -d $PROBLEM_Host_IP \! -s $LOCAL_IP \
  -j SNAT --to-source $LOCAL_IP

それに応じて変数が設定されます。 172.16.20.0/24でのみターゲットに正しいルーティングを設定できると仮定すると、次の方法でこれを簡単に行うことができます。

iptables -t nat -I POSTROUTING 1 -s $LOCAL_IP -j ACCEPT
iptables -t nat -I POSTROUTING 2 -d 172.16.20.0/24 -j ACCEPT
iptables -t nat -I POSTROUTING 3 -j SNAT --to-source $LOCAL_IP
3
Hauke Laging