1. megadreams14

    Posted

    megadreams14
Changes in title
+OpenVPNにてNATの設定をしても、VPN経由でアクセス出来ないとき
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,110 @@
+以前下記記事で、OpenVPNを利用してVPN経由でアクセスするような処理を記載した。
+
+[OpenVPNをAmazonLinuxにインストールして、VPN経由で外部ネットワークにアクセスする](https://qiita.com/megadreams14/items/0d5201245ec33ae463f4)
+
+
+あれから半年近くたち、新たにVPN環境を構築する必要があったのだが、その際にVPN経由で特定のサイトにアクセスしようとすると、NATの設定がうまく効いていないのか、サイトに接続できずにハマってしまったので、その時の対処メモ
+
+
+# 環境
+
+- Amazon Linux
+
+```bash
+$ cat /etc/system-release
+Amazon Linux AMI release 2017.09
+```
+
+- OpenVPN
+
+```bash
+$ openvpn --version
+OpenVPN 2.4.4 x86_64-redhat-linux-gnu [Fedora EPEL patched] [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Nov 1 2017
+library versions: OpenSSL 1.0.2k-fips 26 Jan 2017, LZO 2.08
+```
+
+- iptable
+
+```bash
+$ iptables --version
+iptables v1.4.18
+```
+
+## OpenVPNの設定
+
+特定のサイトに対してのみVPN経由でアクセスするといったことを実現したかったので下記のような設定をしてみた。
+
+```/etc/openvpn/server.conf
+##################
+## 一部抜粋
+##################
+
+
+# VPNで接続してきたクライアントに割り振るIPアドレスを定義
+server 10.8.0.0 255.255.255.0
+ifconfig-pool-persist ipp.txt
+
+# VPN経由でアクセスさせたいIPアドレスを記載する
+push "route xxx.xxx.xxx.xxx 255.255.255.0"
+
+# DNSの設定は、一旦外部DNSの設定をしておく
+push "dhcp-option DNS 8.8.8.8"
+
+# 全ての通信をこのVPNサーバ経由にする設定はOFFとする
+# push "redirect-gateway def1"
+```
+
+## iptablesの設定
+
+10.8.0.0/24のネットワークからのアクセウをeth0のネットワークインタフェースを利用してインターネットに出ていく設定。
+
+```bash
+$ iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
+$ service iptables save
+```
+
+念のため設定を確認
+
+```bash
+$ iptables -L -n -t nat
+Chain PREROUTING (policy ACCEPT)
+target prot opt source destination
+
+Chain INPUT (policy ACCEPT)
+target prot opt source destination
+
+Chain OUTPUT (policy ACCEPT)
+target prot opt source destination
+
+Chain POSTROUTING (policy ACCEPT)
+target prot opt source destination
+MASQUERADE all -- 10.8.0.0/24 0.0.0.0/0
+```
+
+これらの設定だけでよかったと思っていたが、VPNに接続して、
+上記で指定した「xxx.xxx.xxx.xxx」にアクセスしても通信中のまま何も起きず...
+
+
+# 解決方法
+
+VPNには接続できており、OpenVPNの設定で指定したサイトに対してのみ接続できない状況だったので、NAT周りが怪しいとは思って調査しました。
+
+そして、本当にたまたま見ていた「[iptablesを利用してNATサーバを構築](http://techblog.raccoon.ne.jp/archives/47152095.html)」の記事にて、
+パケットを転送するためには、「/etc/sysctl.conf」の「net.ipv4.ip_forward」をONにする必要があるとの記載が...なんとそうなのか...
+
+```/etc/sysctl.conf
+# 0 だとIPv4でパケットの転送がされない
+# net.ipv4.ip_forward=0
+net.ipv4.ip_forward=1
+```
+
+念のためiptablesとopenvpnを再起動することで接続できるようになりました。
+
+
+んーこの設定見つけるまで1日近く使ってしまった...
+もっとインフラ詳しくならないとなー><
+
+
+# 参考
+
+- [iptablesを利用してNATサーバを構築](http://techblog.raccoon.ne.jp/archives/47152095.html)