まずは、タイトルのとおりです。
今回はやっとお仕事にも落ち着きが見えてきたのと同時に家庭事情が少し変わってしまったため、前々から試してみたかったことをやってみました。
私の自宅のメイン回線は、KDDIの回線を使ってます。諸般の事情でどうしても固定IPが必要な状況に迫られてしまったわけでして。。。
と思っていたところ自分はエンジニアなんだし、いい加減ルーターの設定とLinuxでiptablesでNAT入れればいけるんじゃ・・・。
と安易にやってみたところ色々躓いたので備忘録も兼ねて書こうかなと思った次第です。
さて、前置きが長くなりました。
■使ったもの
RapsberryPi 3
YAMAHA RTX-1200
■ネットワークの説明
<主系> インターネット→GW→ハブ(*)→PC ハブ(*)→RTX-1200→RapsberryPi
<副系> RTX-1200→USB-MobileLine
ザックリは上記の感じ。
使ったのはこちら
マイIPはどこでも固定IP環境を実現します - INTERLINK
インターリンクさんのMyIP
さてとでは調理していきましょう。
私はRasbianOSを使うのはDebian系と聞いていたのでCentOS7を導入して作りました。
適宜読み替えてください
インストールしたもの
pptp/iptables-services
それ以外は原則標準
ルーター化設定やPPTPの初期設定については色々なお方が書いてるのそちらを参照してください。
一般的に使うのと違って、今回はローカルルーティングの仕方が違います。
まず、通常時のデフォルトゲートウェイは主系のGWのままです。
その上で、PPTPの発呼をした後、細かくルーティングを変更します。
#!/bin/bash ## PATH ## ROUTE=/usr/sbin/route PPPD=/usr/sbin/pppd ${ROUTE} -n ${ROUTE} add -host "インターリンクのアクセスIP” gw ”主系ゲートウェイIP” ${PPPD} call "接続先の名称" updetach ${ROUTE} del default gateway "主計ゲートウェイIP" ${ROUTE} add default gateway "MyIPのゲートウェイIP" ${ROUTE} add -net "ルーティングしたいIP帯域" gw "ルーティング先ルーターIP" ${ROUTE} -n
上記の最下行から2つ目の数を作れば好きにルーティングできます。
RaphsberryのPPTP設定はこれを再起動のために、rc.localあたりに設定すれば問題なし。
cURLとか使えば、アクセス元IPアドレスがインターリンクのMyIPになっていることを確認できます。
これで、1つ目の難関クリアです。
さて、次にIPtablesこのラズパイ、このままだとグローバルそのままにむき出しです。なので、iptablesでNAT設定やらなんやらを仕込みます。
とりあえず、以下を追加
# echo 1 >/proc/sys/net/ipv4/ip_forward # echo "echo 1 >/proc/sys/net/ipv4/ip_forward" > /etc/rc.local
これでとりあえず、IPの転送ができるようなりました。
さて次。この先がセキュリティの問題。
結構ここからは意見が分かれると思いますが、私はファイルをバックアップして直接いじる派の人です。
# cp /etc/sysconfig/iptables /root/iptables_yyyymmdd # vi /etc/sysconfig/iptables
とりあえず、ですが、INPUTをデフォルトで拒否します。
がこのときちゃんと設定しないとラズパイにアクセスできなくなりますのでご注意ください。
*filter :INPUT DROP [0:0] ←これを"INPUT ACCEPT⇒INPUT DROP”へ変更 :FORWARD DROP [0:0] ←これを”FORWARD ACCEPT⇒FORWARD DROP”へ変更 :OUTPUT ACCEPT [0:0]
この段階で、保存はしてもいいけど、iptablesの再起動はしないように。
さて、細かい設定を。
-A INPUT -m state --state NEW -m hashlimit --hashlimit-name ssh_limit --hashlimit 10/m --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-htable-expire 600000 -j ACCEPT
SSHの攻撃が多いので、まずはハッシュリミットのリミットバーストを追加。
その後に、順次入れていく。
MyIPのVPNサーバの設定を追加
-A INPUT -s "MyIPのサーバIP" -p tcp -m state --state NEW --dport 1723 -j ACCEPT -A INPUT -s "MyIPのサーバIP" -p gre -m state --state NEW -j ACCEPT
上記はPPTPのもののみを許可しています。
次に許可するサービスの設定を追加していく
-A INPUT -s "接続元IP" -p tcp -m state --state NEW --dport 1723 -j ACCEPT
※よしなに書き換えてください。
最後に拒否設定
# Local Interface -A INPUT -i lo -j ACCEPT ←自身は全許可 -A INPUT -i eth0 -j ACCEPT ←ローカルは全許可 # Restrict ACCESS -A INPUT -i ppp+ -m state --state RELATED,ESTABLISHED -j ACCEPT ←接続しに着たIPは部分許可(パケットステートにて一部許可) # INPUT Reject -A INPUT -j REJECT --reject-with icmp-host-prohibited ←他全部拒否
上記はあくまで、「RaspberryPiに対する設定」
なので、同様にフォワードしていく設定も追加する。
そのときに最初に
# MTU Auto Setting -A FORWARD -p tcp --tcp-flags SYN,RST SYN --j TCPMSS --clamp-mss-to-pmtu
を入れておくと、自動的にMTUとかの設定を変更してくれる。
FORWARDの設定方法は他にもみなさんが良さげなことを書いてくれてるので(以下略
最後のNAT設定
*nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s "ローカルIPアドレス帯域" -o ppp+ -m state --state NEW -j MASQUERADE
基本的にDNATやSNATの部分がちょっとあるが、今回は一旦割愛。
上記まで完了したところで、iptablesを起動するとルーターとして稼働することを確認。
あとはYAMAHA側の拠点IP設定とかを追加していく。
その際、YAMAHAも当然ながら、デフォルトゲートウェイは主系GWを向いているので拠点先IPは
ipsec ike remote address "設定番号" ”RaspberryPiのローカル側のIP”
とすると、接続ができる。
たまに安定しないことがあるが、備忘録なのでこんな感じ。