キャプティブポータルwifiホットスポットを作成しようとしています。
セットアップの目的:
Wlan0を介してホットスポットに接続するユーザーは、eth1を介してインターネットへのアクセスを許可されるべきではありません。
「Sign in wifi network」がAndroid、iphone、および接続するすべてのデバイスに表示されるように、次のリクエストをルーティングしようとしています
http://clients1.google.com/generate_204 と他のオペレーティングシステムの他のURLはまだわかりませんが、ローカルサーバーにアクセスして、実サーバーが返すものを返します。
これを達成するには、dnsmasqとhostapdを使用します。
問題:dnsmasq.confでaddress = /#/ 127.24.2.1を使用すると、内部スクリプトからのインターネット要求も失敗します。私は、dnsmasqを使用してwlan0インターフェイストラフィックのみをフィルタリングする方法を記載したdnsmasq configのmanページに従っていると思います。
さらに何をすべきか.
マシンにはこれらのインターフェースがあります
eth1 Link encap:Ethernet HWaddr 00:1e:06:30:5b:03
inet addr:192.168.0.107 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::21e:6ff:fe30:5b03/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:37047 errors:0 dropped:0 overruns:0 frame:0
TX packets:1752 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3351437 (3.1 MiB) TX bytes:176100 (171.9 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:796 errors:0 dropped:0 overruns:0 frame:0
TX packets:796 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:284838 (278.1 KiB) TX bytes:284838 (278.1 KiB)
wlan0 Link encap:Ethernet HWaddr 98:de:d0:1b:95:5a
inet addr:172.24.1.1 Bcast:172.24.1.255 Mask:255.255.255.0
inet6 addr: fe80::9ade:d0ff:fe1b:955a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:576 (576.0 B)
DNSMASQは次のようになります
interface=wlan0 # Use interface wlan0
listen-address=172.24.1.1 # Explicitly specify the address to listen on
#bind-interfaces # Bind to the interface to make sure we aren't sending things elsewher$
server=8.8.8.8 # Forward DNS requests to Google DNS
domain-needed # Don't forward short names
bogus-priv # Never forward addresses in the non-routed address spaces.
dhcp-range=172.24.1.50,172.24.1.150,12h # Assign IP addresses between 172.24.1.50 and 172.24$
address=/#/172.24.1.1
except-interface=eth1
私はnodejsエクスプレスサーバーを使用してこれを行います
app.get('/generate_204', function(req, res) {
console.log('generate 204 hit');
res.statusCode = 302;
res.setHeader("Location", "/");
res.end();
});
Hostapdを使用してホットスポットを作成しました。設定は
# This is the name of the WiFi interface we configured above
interface=wlan0
# Use the nl80211 driver with the brcmfmac driver
driver=nl80211
# This is the name of the network
ssid=Pi3-AP
# Use the 2.4GHz band
hw_mode=g
# Use channel 6
channel=6
# Enable 802.11n
ieee80211n=1
# Enable WMM
wmm_enabled=1
# Enable 40MHz channels with 20ns guard interval
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
# Accept all MAC addresses
macaddr_acl=0
# Use WPA authentication
auth_algs=1
# Require clients to know the network name
ignore_broadcast_ssid=0
# Use WPA2
wpa=2
# Use a pre-shared key
wpa_key_mgmt=WPA-PSK
# The network passphrase
wpa_passphrase=raspberry
# Use AES, instead of TKIP
rsn_pairwise=CCMP
私は要件を説明しようとしましたが、説明部分をうまくやったかどうかわかりません。同じ問題について私がここでserverfaultについて提起した別の質問があります。それはトピック外とマークされました。それを読むと、要件を明確に理解できます。 https://serverfault.com/questions/823139/iptables-for-linux-captive-portal-wifi-hotspot
address = /#/ 127.24.2.1を使用すると、内部スクリプトからのインターネット要求も失敗します
クライアントのwifiと同じローカルのdnsmasqサーバーと同じDNS名を解決するために内部スクリプトが使用されているようです。
/etc/resolv.conf
構成を確認し、dnsmasqサーバーアドレス(127.24.2.1
または127.0.0.1
またはその他)が存在する場合は削除します。代わりに、ISP DNSサーバー、Google DNS、またはアドレスを127.24.2.1
に置き換えない、ご希望のその他のDNSサーバーを使用してください。
注システムでresolvconfを使用して/etc/resolv.conf
(inresolv.conf# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
)のような警告が表示される場合は、代わりに/etc/resolvconf/resolv.conf.d/
で構成を編集する必要があります。その後、/etc/resolv.conf
を再生成します(ネットワークを再起動するか、システム全体を再起動します)
別の可能性:パッケージの削除resolvconfと編集/etc/resolv.conf
この質問の更新(2017年)に興味がある場合は、問題を再現して解決策を見つけることができました。
ループバックインターフェイスの解決からdnsmasqを無効にします(/etc/dnsmasq.conf
内):
except-interface=lo
Resolvconfの末尾ファイルに追加(/etc/resolvconf/resolvconf.conf.d/tail
内)
nameserver 8.8.8.8
サービスの再開
Sudo systemctl restart dnsmasq
Sudo resolvconf -u
これが行うこと
dnsmasq
はlocalhostで行われたDNS要求をすべて拒否するようになり、localhostは2番目のネームサーバー(現在は8.8.8.8)を使用する必要があります。
/etc/resolvconf/resolvconf.conf.d/
ディレクトリがない場合はどうなりますか?
代わりにopenresolvがインストールされている可能性があります... openresolvをアンインストールしてresolvconfをインストールしました。あなたは他の問題に出くわすでしょう-しかし、それはおそらくこの回答には関係ありません。