web-dev-qa-db-ja.com

OpenVPNとルーティングとIPtables

目標:内部ネットワークデバイスにアクセスし、トンネル経由でWebを閲覧します。

192.168.2.x = internal network
192.168.3.x = openvpn server
192.168.2.111 = openvpn server on internal network

[root@openvpn ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.3.2     *               255.255.255.255 UH    0      0        0 tun0
192.168.3.0     192.168.3.2     255.255.255.0   UG    0      0        0 tun0
192.168.2.0     *               255.255.255.0   U     0      0        0 eth0
link-local      *               255.255.0.0     U     1002   0        0 eth0
default         192.168.2.254   0.0.0.0         UG    0      0        0 eth0

そして

[root@openvpn ~]# cat /etc/openvpn/server.conf
port 1194 #- port
proto udp #- protocol
dev tun
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
reneg-sec 0
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so /etc/pam.d/login #- Comment this line if you are using FreeRADIUS
#plugin /etc/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf #- Uncomment this line if you are using FreeRADIUS
client-cert-not-required
username-as-common-name
server 192.168.3.0 255.255.255.0
Push "redirect-gateway def1"
Push "dhcp-option DNS 8.8.8.8"
Push "dhcp-option DNS 8.8.4.4"
Push "route 192.168.2.0 255.255.255.0"
keepalive 5 30
comp-lzo
persist-key
persist-tun
status 1194.log
verb 3

そして

client
dev tun
proto udp
remote 18.4.79.28 1194
resolv-retry infinite
nobind
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
persist-key
persist-tun
ca ca.crt
auth-user-pass
comp-lzo
reneg-sec 0
verb 3

うまく接続してVPNボックスにアクセスできます。ただし、ウェブを閲覧したり、他のローカルネットワークデバイスにアクセスしたりできません。

IPTablesをオフにしています。 IPテーブルルールが必要ですか、それともルーティングはオフですか?

192.168.2.0にアクセスするには192.168.3.0が必要です:)

編集:言及するのを忘れました、私はこのセットを持っています;

net.ipv4.conf.default.forwarding=1

編集:

私はこれを使いました:

[root@openvpn ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source <SERVERIP>
[root@openvpn ~]# iptables -I INPUT 1 -p udp --dport 1194 -j ACCEPT

私は得る:

pinging 192.168.2.5
reply from 192.168.3.1 destination Host unreachable
4
user206999

確認して修正する必要がある可能性のあるものが2つあります。

まず、カーネルでIP転送がオンになっていることを確認する必要があります。 IP転送により、カーネルは1つのインターフェースから別のインターフェースにパケットを渡すことができます。これは以下で確認できます:

$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

0ではなく1が表示される場合は、IP転送を有効にする必要があります。最も簡単で信頼できる方法は、次の行を/etc/sysctl.confに追加することです(またはnet.ipv4.ip_forwardのエントリがすでにある場合は変更します)。

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

次に、sysctl -pを実行して、そのファイルから構成を再ロードします。

次に、VPNからのパケットに対してネットワークアドレス変換(NAT)を実行するようにIPtablesを構成する必要があります。そうしないと、これらのパケットがeth0を送信したときに、そのパケットを受信するデバイスは、どのように話すかがわかりません(VPNサーバーを経由して192.168.3.0/24に戻るルートはありません)。 NATを設定する方法は2つあります:静的NAT(SNAT)とマスカレード。送信インターフェースのIPアドレス(あなたの場合はeth0)がそうでない場合、SNATが推奨されます)マスカレードモードは、ダイヤルアップまたは他の動的に割り当てられたアドレス構成(ケーブルモデム、DSLなど)などの動的IP状況向けに設計されていますが、どちらも同様に構成されています。

SNATの場合、次の行に沿ってIPtablesルールを追加します(注:eth0に割り当てたIPがわからないため、192.168.2.13を使用しました。必要に応じて変更します)。

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.2.13

Eth0のIPアドレスが静的で信頼性がない場合、次のようなマスカレードを使用します。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
5

AWSを使用しているかどうかはわかりませんが、これを実行するために使用しているAWSインスタンスで宛先/ソースチェックを無効にするであることを確認してください。

インスタンスを右クリックし、マウスをネットワークに移動すると、そこにオプションが表示されます。

これが役に立たない場合は、他の誰かの役に立つことを願っています。

2
lobi

VPNクライアントがネットワークにアクセスするには、iptablesルールが必要です。

まず、システムでNATが許可されていることを確認します。

# Setup sysctl to enable NAT.
echo "# Allowing nat translation for VPN clients.
net.ipv4.conf.default.forwarding=1
net.ipv4.ip_forward=1" > "/etc/sysctl.d/openvpn.conf"
# load new sysctl config.
command sysctl -p "/etc/sysctl.d/openvpn.conf" > '/dev/null'

次に、VPNネットワークにNAT iptablesルールをインストールします。

CURRENT_IP_RANGE="192.168.2"
command iptables -t nat -C POSTROUTING -s "${CURRENT_IP_RANGE}.0/24" \
                      -o 'eth0' -j MASQUERADE 2>'/dev/null' \
    || command iptables -t nat -A POSTROUTING -s "${CURRENT_IP_RANGE}.0/24" \
                       -o 'eth0' -j MASQUERADE

これらのルールは openvpn-tools の抜粋であり、 DebianへのOpenVPNのインストールとセットアップ 、OpenVPN管理スクリプト、およびハウツーで記述されています。

VPNクライアントからDNSサーバーにアクセスできることも確認してください。簡単な答えはOpenDNS(8.8.8.8)です。より複雑ですが、より良い解決策は、サーバーにバインドをインストールすることです(これはopenvpn-toolsで使用される解決策です)。

openvpn-toolsは、さまざまなシステムのクライアント構成のエクスポートを提供し、新しいVPNネットワークのセットアップを自動化するため、興味深いかもしれません。

Openvpn 2.xサーバーおよび1.5クライアント用の編集

参照: OpenVPNリリースノート

OpenVPN 2.0が1.5/1.6バージョンと通信できるようにするには、これを1.x構成ファイルに入れます。

tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
key-method 2

TLSを使用する場合、key-method 2がデフォルトになりました。

2
Biapy

あなたの状況では、NAT(内部ネットワークとopenvpnネットワークの間)を使用する代わりに、標準のルーティングを使用するようにしてください。)NATが最後のオプションである必要があります。

「エッジルーター」(おそらくCPE)(内部ネットワークと残りのインターネットの間にある)は、VPNノード(192.168.3.0/24内)のパケットをOpenサーバーに送信する必要があります。次のようなルートをEdge-router/CPEに追加する必要があります。

# This is the Linux command, find the equivalent for your router:
ip route add 192.168.3.0/24 via 192.168.2.111

これで、このルーターはFAI提供のコンボxDSLモデル+ルーターになる可能性があるため、これを実行できない場合があります。

これを実行できない場合(ルーターにルートを追加できない場合)、エッジルーターが内部のネットワークを192.168.0.0/16(または少なくとも192.168.3.0/34を含む)と見なしている場合は、eth0にARPプロキシを設定して、メインネットワークのVPNノード:

echo 1 > /proc/sys/net/ipv4/conf/$xx/proxy_arp

x = eth0、x = tun0、x = all(どのインターフェイスでこのオプションを設定する必要があるのか​​本当にわかりません)。

このアイデアは、OpenVPNサーバーがVPN内のノードのeth0ネットワーク上のARP要求に応答するというものです。これは、ルーターが192.168.3.0/24が内部ネットワークにあると見なしている場合にのみ機能します。そうでない場合、内部ネットワークでARP要求を送信しません。

0
ysdx