ここのソフトウェア開発者は、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に接続できますが、確認する必要のあるサブシステムの全体像を把握するのに問題があります。
セットアップの目標は次のとおりです。
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
に)/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サーバーがこれらのどの部分を実行するのかわかりません。
カーネル内の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