Raspberry Pi B+をOpenVPNクライアントにしてLAN to LANにしてみた(3)
続きです。実は、ワタシにとってこれが最大の難関でした。
5. クライアントマシンでIPフォワードとTUN/TAPフォワードを有効化する
次のステップは「クライアントマシンでIPフォワードとTUN/TAPフォワードを有効化する」です。これはOpenVPN日本語情報サイトの「ドキュメント」ー「How To」ー「クライアント側、またはサーバー側サブネットへのクライアントPCの追加によるVPNの拡張」には、ほんの1行、
まず、このクライアントPCでIPフォワードとTUN/TAPフォワードを有効にしてください。
と記述されているだけ。行うことは、
の2つだけだと言うことは分かりますが、具体的な方法が良く分かりませんでした。(分かる人には、これだけでも分かるんでしょうけどねぇ。)いずれもFAQページへリンクが張られていますが、かろうじてリンク先らしき物が分かるのは「IPフォワードを有効にする」の方だけ。これは、おそらくHow do I enable IP forwarding?でしょう。この記事を元にRaspberry PiのDebian Linuxでの方法を探りました。
1) IPフォワードを有効にする
OpenVPNのFAQに記載されているのと同じ方法でRaspberry PiでもIPフォワードを有効にすることができます。しかし、ここに記述されている方法は一時的なもので、再起動すると元に戻ってしまうそうです。再起動後もIPフォワードを有効にするには "/etc/sysctl.conf" を編集します。(以下の赤字の部分です。)
#
# /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additonal system variables
# See sysctl.conf (5) for information.
#
〜略〜
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
|
上記のように編集した後、Raspberry Piを再起動してIPフォワードが有効になっているか確認します。
# cat /proc/sys/net/ipv4/ip_forward
1
|
となっていればOK。
1) TUN/TAPフォワードを有効にする
こちらの方が良く分からず、随分と試行錯誤しました。どうやら iptables(Firewall)の設定をしなければならないようです。今回OpenVPNはルーターモードで使っていますので、tunデバイスへのフォワード設定が必要になります。
iptable(Firewall)の設定をしておらず、全パケットの入出力、フォワード(転送)に何ら制限をかけていない状態であれば特に何も設定しなくても多分大丈夫なのだと思われます。しかし、ウチのRaspberry Pi B+は24時間運転を想定して、iptables(Firewall)を有効にすべく iptables-persistent をインストールしてあります。そのため、iptablesの設定を "/etc/iptables/rules.v4" に記述する必要があるのでした。しかし、どのような記述をすれば良いのやら・・・
あちこちググッたり試行錯誤した結果、現時点でのOpenVPNに関する "/etc/iptables/rules.v4" の記述は以下のようにしています。
#
# Inputチェーン
# -------
# OpenVPN
# -------
-A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT
-A INPUT -i tun+ -j ACCEPT
#
# FORWARDチェーン
#
# -------
# OpenVPN
# -------
-A FORWARD -i tun+ -j ACCEPT
-A FORWARD -o tun+ -j ACCEPT
-A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
#
# OUTPUTチェーン
#
# -------
# OpenVPN
# -------
-A OUTPUT -o tun+ -j ACCEPT
|
先ず、INPUT, OUTPUTチェーンで tunデバイスとの入出力を受け付けるようにしています。そしてFORWARDチェーンで、tunデバイスからの入力とtunデバイスへの出力のフォワードを受け付けるようにしています。
とは言うものの、あちこち検索して内容をパクッてきたものですから、実は良くわかってませ〜ん(^^;)。とにかく、現在はこの設定で問題なく動いていると言うだけで、もしかしたら冗長だったり、セキュリティ上良くない設定になっているかもしれません。
上記のように "/etc/iptables/rules.v4" に書き加えたら、設定を iptablesへ反映させて、iptablesの設定内容を確認します。
# service iptables-persistent restart
# iptables --list
Chain INPUT (policy DROP)
target prot opt source destination
〜略〜
ACCEPT udp -- anywhere anywhere state NEW udp dpt:openvpn
ACCEPT all -- anywhere anywhere
〜略〜
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
|
良く分からんが、出来ているんじゃないかな?iptables(Firewall)の事も勉強せんとイカンなぁ・・・
|