特定のプロセスからのトラフィックのみがVPNを通過するように、openvpnを構成しようとしていますが、それらのプロセスはどこにでも接続できます。
Openvpnにルート設定を行わせず(_--route-noexec
_)、アプリケーションをtunインターフェイスに明示的に接続させる(例:_curl --interface tun0 'http://www.ipchicken.com'
_)ことでそれを行おうとしていますが、connect()
のようですタイムアウトします。
Tunインターフェースを幸せにするために私がしなければならない他のステップはありますか?
route-nopull
http://openvpn.net/index.php/open-source/documentation/manuals/69-openvpn-21.html
--clientまたは--pullとともに使用する場合、ルートを除いてサーバーによってプッシュされたオプションを受け入れます。このオプションをクライアントで使用すると、サーバーはクライアントのルーティングテーブルにルートを追加できなくなりますが、このオプションを使用すると、サーバーはクライアントのTUN/TAPインターフェイスのTCP/IPプロパティを設定できます。
そのため、OpenVPN構成ファイルにroute-nopullを追加します。 cURL/PHPを使用したOpenVPNVPN の使用方法に関する投稿を書きました。
tun0
インターフェイスからのパケットに別のルーティングテーブルを使用することで、これを実現できます。
# ip route add $VPN_NETWORK dev tun0
# ip route add default via $VPN_GATEWAY_IP table 1
# ip rule add iif tun0 table 1
最初のルートはデフォルトテーブル(テーブル254)に入り、2番目はテーブル2に入り、3行目はtun0
インターフェイスから2番目のルーティングテーブルにパケットをバインドします。このテーブルに/etc/iproute2/rt_tables
で名前を付けることができます。
# echo '1 vpn' >> /etc/iproute2/rt_tables
VPNゲートウェイが10.8.0.1/16
の場合は、次のように入力する必要があります。
# ip route add 10.8.0.0/16 dev tun0
# ip route add default via 10.8.0.1 table vpn
# ip rule add iif tun0 table vpn
これはPolicy Routing
と呼ばれ、これを機能させるには、カーネル構成でCONFIG_IP_MULTIPLE_TABLE
を有効にする必要があります。