web-dev-qa-db-ja.com

LinuxでVPN接続を共有するときにDNSを構成するにはどうすればよいですか?

Linuxコンピューター(Raspberry Pi)を使用して、イーサネット経由でVPN接続を共有しています。 Raspberry Piを(VPN経由ではなく)通常どおりインターネットに接続したい。私はそれを機能させることに非常に近いですが、eth1ネットワークのDNSを構成する方法がわかりません。

Connection to the internet: eth0 192.168.11.21/24, gateway 192.168.11.1
vpn connection: tun0 <- openvpn connection
vpn sharing network: eth1 192.168.5.1/24 <- this maching is the gatway for the vpn sharing network

eth1 config:

eth1: /etc/network/interface
auto eth1
iface eth1 inet static
address 192.168.5.1
netmask 255.255.255.0

Eth1(vpn共有ネットワーク)のdhcpサーバーとしてdnsmasqを実行しています

# Configuration file for dnsmasq.
#
interface=eth1
dhcp-range=192.168.5.50,192.168.5.150,12h

vpn config

Eth1からのトラフィックにのみVPNを使用させたい。別のルーティングテーブルを使用して、自分でルートを設定します。

# extract from openvpn config
route-noexec
route-up "/etc/openvpn/route-up.sh"
down "/etc/openvpn/down.sh"

# route-up.sh
/sbin/ip route add $trusted_ip/32 via $route_net_gateway table vpn
/sbin/ip route add 0.0.0.0/1 via $route_vpn_gateway table vpn
/sbin/ip route add 128.0.0.0/1 via $route_vpn_gateway table vpn

また、個別のルーティングテーブルを設定するためにいくつかのコマンドを実行する必要がありました。

# make a new routing table called vpn
echo 200 vpn >> /etc/iproute2/rt_tables 

# add a rule to use the routing table for the addresses on eth1
ip rule add from 192.168.5.0/24 table vpn

インターフェイスを結び付ける:

sysctl net.ipv4.ip_forward=1      
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

テスト:

WindowsラップトップをVPN共有ネットワークに配置しました。インターネットアドレスと直接通信することができます。ただし、ドメイン名の使用ではDNSルックアップは失敗します。 DNSを構成するための有効な方法が見つかりません。

これをdnsmasqに追加してみました

server=<dns-server-address> 

また、/ etc/network/interfacesのeth1の下にこの行を追加してみました

dns-nameservers <dns-server-address> 

これにより、resolvconf-lはこれを返しました。

# resolv.conf from eth1.inet
# Generated by ifup for eth1.inet
nameserver <dns-server-address1>
nameserver <dns-server-address2>

しかし、/ etc /resolv.confは同じことを繰り返します。

# Generated by resolvconf
nameserver 127.0.0.1

/etc/resolv.confを直接編集してみました。 -しかし、それは自動更新され、ほとんどすぐに再び上書きされます。

-編集-

私の目標は、VPN共有ネットワーク上のクライアントで特定の構成を必要としないセットアップを行うことです。 (設定できないデバイスを接続します)

また、可能であればVPN経由でDNSリクエストを送信したいと思います。

-編集2--

最初。 Linuxクライアントでのテストに切り替えました。 resolv.confを変更してDNSサーバーを追加すると、VPNのインターネット接続が機能します。

しかし-解決策5が私にとっての解決策のようです。これはDNSパケットを傍受し、それらを変更して新しいDNSサーバーに転送しますか?

私はそれを私のために働かせることができませんでした。ここに構成を投稿します。私は何かが足りないのですか?

# iptables-save
# Generated by iptables-save v1.4.21 on Fri Sep 23 16:57:46 2016
*mangle
:PREROUTING ACCEPT [51:3878]
:INPUT ACCEPT [49:3758]
:FORWARD ACCEPT [2:120]
:OUTPUT ACCEPT [30:3438]
:POSTROUTING ACCEPT [32:3558]
-A PREROUTING -p tcp -m tcp --dport 53 -j MARK --set-xmark 0x1/0xffffffff
-A PREROUTING -p udp -m udp --dport 53 -j MARK --set-xmark 0x1/0xffffffff
COMMIT
# Completed on Fri Sep 23 16:57:46 2016
# Generated by iptables-save v1.4.21 on Fri Sep 23 16:57:46 2016
*nat
:PREROUTING ACCEPT [4:337]
:INPUT ACCEPT [3:277]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i tun0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 198.18.0.1
-A PREROUTING -i tun0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 198.18.0.2
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT
# Completed on Fri Sep 23 16:57:46 2016
# Generated by iptables-save v1.4.21 on Fri Sep 23 16:57:46 2016
*filter
:INPUT ACCEPT [41189:45918808]
:FORWARD ACCEPT [63803:44422296]
:OUTPUT ACCEPT [33919:5341216]
COMMIT
# Completed on Fri Sep 23 16:57:46 2016

# ip route list table vpn
0.0.0.0/1 via 172.21.24.1 dev tun0 
81.171.74.16 via 192.168.11.1 dev eth0 
128.0.0.0/1 via 172.21.24.1 dev tun0 


# ip route list table main
default via 192.168.11.1 dev eth0 
default via 192.168.11.1 dev eth0  metric 202 
172.21.24.0/23 dev tun0  proto kernel  scope link  src 172.21.24.57 
192.168.5.0/24 dev eth1  proto kernel  scope link  src 192.168.5.1 
192.168.11.0/24 dev eth0  proto kernel  scope link  src 192.168.11.21 
192.168.11.0/24 dev eth0  proto kernel  scope link  src 192.168.11.21  metric 202 

# ip rule
0:  from all lookup local 
32764:  from all fwmark 0x1 lookup vpn 
32765:  from 192.168.5.0/24 lookup vpn 
32766:  from all lookup main 
32767:  from all lookup default 

# cat /etc/resolv.conf 
# Generated by resolvconf
nameserver 127.0.0.1

# On the client
# cat /etc/resolv.conf 
# Generated by resolvconf
nameserver 192.168.5.1

-編集3-

# tcpdump -i tun0 -n port 53
23:44:29.787915 IP 192.168.5.1.53 > 192.168.5.128.38840: 36460 4/0/0 A 157.7.203.102, A 157.7.154.23, A 116.58.172.182, A 157.7.235.92 (101)
23:44:29.788071 IP 192.168.5.1.53 > 192.168.5.128.38840: 37999 0/0/0 (37)
23:44:30.619149 IP 192.168.5.1.53 > 192.168.5.128.58425: 3383 1/0/0 A 129.169.10.40 (47)
23:44:30.620635 IP 192.168.5.1.53 > 192.168.5.128.58425: 11649 0/1/0 (83)

これを見ると、DNS応答が戻ってきていますが、クライアント(192.168.5.128)に到達していません。正しい?今、私はそれを修正する方法を理解する必要があります...

2
pauld

DNSサーバーをWindowsマシン、すべてのOpenVPNクライアント、またはおそらくRPIに固有にするかどうか、およびDNSクエリがVPNを経由するかどうかを明確にしていません。

1。(OpenVPN経由の)個別のクライアントとRPIDNS。

これが最も簡単なケースです。クライアントDNSをクライアント内に設定し、RPIDNesを/ etc/resolv.confに設定します。

2。個別のクライアント(OpenVPNの外部)とRPIDNS。

次のルーティングルールをRPIに追加する必要があることを除いて、上記と同じです。

    ip route add 8.8.8.8/32 via Your.Router.IP.Address dev Your.Non.VPN.Interface table vpn

ここで、(Windows)クライアントがGoogleのDNS8.8.8.8を使用していると仮定しました。

または、クライアントからのDNSパケットにマークを付け、mainルーティングテーブルを介してルーティングできます。

     iptables -A PREROUTING -t mangle -p tcp --dport 53 -j MARK --set-mark 1
     iptables -A PREROUTING -t mangle -p udp --dport 53 -j MARK --set-mark 1
     ip rule add from all fwmark 1 table main
     iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE

4。 OpenVPN経由か外部かに関係なく、RPIとクライアントに同じDNSサーバー。

箇条書き1または2と同じように、同じDNSのセットを使用するだけです。

5。明らかにOpenVPNを介したすべてのOpenVPNクライアントの自動設定。

VPNクライアントごとにDNSを個別に設定するのは面倒だと思うかもしれません。特に、サーバーのネットワークにDNSを設定する必要がある場合は、Googleほど簡単ではありません。最初に、サーバーの構成ファイルに次の部分を追加して、サーバーからRPIクライアントにDNSオプションをプッシュする必要があります。

    Push "dhcp-option DNS 10.66.0.4"

このオプションはforeign_option_ {n}という変数に書き込まれます。この方法でプッシュされた最初のオプションはn = 1になり、その値(上記の場合)は次のようになります。

    foreign_option_1="dhcp-options DNS 10.66.0.4"

この変数は自動的にpスクリプトに渡され、そこで3つの部分に分割して、たとえば$ varでIPアドレスを抽出する必要があります。これで、追加できます。 route-upスクリプトへの次の行:

    iptables -t mangle -A PREROUTING -p tcp --dport 53 -j MARK --set-mark 1
    iptables -t mangle -A PREROUTING -p udp --dport 53 -j MARK --set-mark 1
    ip rule add  fwmark 1 table vpn
    iptables -t nat -A PREROUTING -p tcp --dport 53 -i tun0 -j DNAT --to-destination $var3
    iptables -t nat -A PREROUTING -p udp --dport 53 -i tun0 -j DNAT --to-destination $var3

これを機能させるには、mayリバースパスフィルターを無効にする必要があります。ArchLinuxラップトップではnot実行する必要があるため、わかりません。 DebianワークステーションI do。それで、私は少し混乱しています、今、これについて申し訳ありません。

1
MariusMatutiae