VPN 接続した N-06C にプロキシを通す ~N-06C の VPN 事情

iptables の設定

基本的には、PPTP を通すため、1723/tcp を許可することと、PPTPは GRE(プロトコル番号47番)を使用するので、GRE を送受信ともに許可してあげることが必要になります。

具体的には次の3行が必要になります。(デフォルトで、INPUT, OUPUT チェーンが DROP と想定)

/sbin/iptables -A INPUT -p tcp --dport 1723 -i eth0 -j ACCEPT
/sbin/iptables -A INPUT -p 47 -i eth0 -j ACCEPT
/sbin/iptables -A OUTPUT -p 47 -o eth0 -j ACCEPT

その上で、透過型プロキシとするには、N-06C からやってくる TCP 80番の通信トラフィックを Squid に回るようにしてあげなくてはなりません。これはいわゆる Destination NAT (DNAT) と呼ばれるもので、宛先の IP アドレスとポート番号を PREROUTING チェーンで改変します。

/sbin/iptables -t nat -A PREROUTING -s 172.16.2.0/24 -p tcp -m tcp --dport 80 -j DNAT --to-destination IPaddress:8080

IPaddress:8080IPaddressの部分はお使いの VPS の eth0 の IPアドレスになります。

POSTROUTING チェーンで全てのパケットを NAPT(IPマスカレード)することで、終わります。

/sbin/iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -j MASQUERADE

 

pptp接続するとppp0 などのインターフェースが作られ、ppp0 から eth0 またはその反対の通信は内部的にはルーティングになるため、Incoming と Outgoing の両方のパケットが通るようにする必要があります。

/sbin/iptables -A INPUT -i ppp+ -j ACCEPT
/sbin/iptables -A OUTPUT -o ppp+ -j ACCEPT

また、ppp+ から eth0 のようにインターフェース間でのルーティングを許可します。

/sbin/iptables -A FORWARD -j ACCEPT

実際にインターフェース間でルーティングを行うには、/etc/sysctl.conf の編集が必要です。

# vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

 

以上の設定を、iOS で L2TP over IPsec ソリューション で示した iptables のサンプルに追加すると、次のような iptables 変更スクリプトになります。

# vi fw.sh

(以下内容)
#!/bin/sh

/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -t nat -F
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP

# -------------------------------------------------------------
#  INPUT Chain
# -------------------------------------------------------------
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#
## L2TP/IPsec
/sbin/iptables -A INPUT -p udp --dport 500 -i eth0 -j ACCEPT
/sbin/iptables -A INPUT -p udp --dport 4500 -i eth0 -j ACCEPT
/sbin/iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT

#
## Allow packets via L2TP and PPTP tunnel
/sbin/iptables -A INPUT -i ppp+ -j ACCEPT

#
## PPTP
/sbin/iptables -A INPUT -p tcp --dport 1723 -i eth0 -j ACCEPT
/sbin/iptables -A INPUT -p 47 -i eth0 -j ACCEPT

#
##  Insert your own rule(s) here to allow access via INPUT chain:
/sbin/iptables -A INPUT -p tcp --dport 22 -m state --state NEW -i eth0 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 172.16.2.0/24 --dport 8080 -m state --state NEW -i eth0 -j ACCEPT

# -----------------------
#  OUTPUT Chain
# -----------------------
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
/sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#
## L2TP/IPsec
/sbin/iptables -A OUTPUT -p udp --sport 500 -o eth0 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp --sport 4500 -o eth0 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp -m policy --dir out --pol ipsec -m udp --sport 1701 -j ACCEPT

#
## PPTP
/sbin/iptables -A OUTPUT -p 47 -o eth0 -j ACCEPT

#
## ICMP request/reply
/sbin/iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
/sbin/iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

#
## Allow packets via L2TP and PPTP tunnel
/sbin/iptables -A OUTPUT -o ppp+ -j ACCEPT

#
##  Insert your own rule(s) here to allow access via INPUT chain:
/sbin/iptables -A OUTPUT -p tcp --dport 21:22 -m state --state NEW -j ACCEPT -o eth0
/sbin/iptables -A OUTPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT -o eth0
/sbin/iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT -o eth0
/sbin/iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT -o eth0
/sbin/iptables -A OUTPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT -o eth0
/sbin/iptables -A OUTPUT -p udp --dport 53 -o eth0 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp --sport 123 -o eth0 -j ACCEPT

# -----------------------
#  Forwarding Chain
# -----------------------
/sbin/iptables -A FORWARD -j ACCEPT

# -----------------------
#  NAPT
# -----------------------
/sbin/iptables -t nat -A PREROUTING -s 172.16.2.0/24 -p tcp -m tcp --dport 80 -j DNAT --to-destination IPaddress:8080
/sbin/iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -j MASQUERADE

service iptables save
service iptables restart

この fw.sh をセーブし、root で

# sh ./fw.sh

として実行することで、iptables の内容が有効になります。

なお、既存の iptables 設定は全てクリアされますのでご注意ください。

 


前のページへ 次ページへ

 

関連するコンテンツ


  1. 記事拝見させて頂きました。
    現在、VPN経由の透過Proxyが実現できず悩んでいる為、アドバイスいただけると助かります。

    L2TP/IPSecをSoftEtherで実現していますが、
    透過Proxyが実現できず、LTEから直接Accessになってしまいます。
    構成的には
    AndroidWANRouter(PCWM)
    となっており、WMware上のCentOsでProxyを構成しています。
    WMは、あまり構成的には問題ないと思っていますが…

    これをAndroidから透過したいのですが、
    新米インフラなので知識が不足しております。
    アドバイスいただけると助かります。

    VPNは接続出来ているので、VPNが使用するポートのRouter設定は大丈夫だと思います。

    iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 8080
    iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 443 -j REDIRECT –to-port 8080

    で80と443は、ProxyにREDIRECTしているので問題ないかとおもうのですが、なぜ、Proxy経由にならず、LETで調節接続になるのでしょうか?

コメントを残す


メモ - 以下の HTML タグと属性が利用できます。
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>