どのような措置を取るべきかを正確に知りたいです。手動Linuxベースのオペレーティングシステムを実行しているワークステーションで共有インターネット接続を構成します。
NetworkManagerサービスがインストールされているinitシステムとしてsystemdを使用するように構成されたLinuxディストリビューションを使用すると、自動化された方法(システムのデフォルトのネットワーク設定を使用)または次のユーティリティを使用して2つのインターフェース間の共有インターネット接続を構成できることがわかります。 。 nm-connection-editorで)。自動化された方法を使用して共有インターネット接続を構成した後にシステムへの変更を観察できる場合は、手動で再作成するために必要な知識を持つことは当然です。これを念頭に置いて、これを行うために行った手順と見つかった内容は次のとおりです。
デフォルトでは、共有接続を「受信」するインターフェイスには、IPアドレス10.42.0.1および/24サブネットマスクが割り当てられます。
dnsmasqはDHCPおよびDNSサービスを提供し、デフォルトでは10.42.0.1を受け取ります。
- DHCPは10.42.0.2-10.42.0.254の範囲のIPアドレスを提供し、DNSはホストインターフェイスのデフォルトリゾルバを指します。
共有接続を「受信」するインターフェイスサブネットへのパスを含むようにルーティングテーブルが変更されました。今すぐ10.42.0.0/24 dev enp1s0プロトタイプカーネルスコープリンクsrc 10.42.0.1
ipv4 / ipv6に関連する一連のsysctlカーネルパラメータが変更されました。次のbashを使用する前後に関連するsysctlパラメーターをダンプしました。
mybox ~ # sysctl -a | egrep "ipv4|ipv6" > sysctl_before
[ENABLE SHARED CONNECTION]
mybox ~ # sysctl -a | egrep "ipv4|ipv6" > sysctl_after
次に、2つのファイルを比較して、次のような結果を得ました。
6c6
< net.ipv4.conf.all.accept_redirects = 1
---
> net.ipv4.conf.all.accept_redirects = 0
20c20
< net.ipv4.conf.all.forwarding = 0
---
> net.ipv4.conf.all.forwarding = 1
52c52
< net.ipv4.conf.default.forwarding = 0
---
> net.ipv4.conf.default.forwarding = 1
84c84
< net.ipv4.conf.enp1s0.forwarding = 0
---
> net.ipv4.conf.enp1s0.forwarding = 1
116c116
< net.ipv4.conf.lo.forwarding = 0
---
> net.ipv4.conf.lo.forwarding = 1
148c148
< net.ipv4.conf.wlp2s0.forwarding = 0
---
> net.ipv4.conf.wlp2s0.forwarding = 1
185c185
< net.ipv4.ip_dynaddr = 0
---
> net.ipv4.ip_dynaddr = 1
187c187
< net.ipv4.ip_forward = 0
---
> net.ipv4.ip_forward = 1
381c381
< net.ipv6.conf.all.forwarding = 0
---
> net.ipv6.conf.all.forwarding = 1
431c431
< net.ipv6.conf.default.forwarding = 0
---
> net.ipv6.conf.default.forwarding = 1
481c481
< net.ipv6.conf.enp1s0.forwarding = 0
---
> net.ipv6.conf.enp1s0.forwarding = 1
531c531
< net.ipv6.conf.lo.forwarding = 0
---
> net.ipv6.conf.lo.forwarding = 1
581c581
< net.ipv6.conf.wlp2s0.forwarding = 0
---
> net.ipv6.conf.wlp2s0.forwarding = 1
私フィルターそしてナットiptables ルールセットは以下を生成します。
フィルター
3a4,12
> -A INPUT -i enp1s0 -p udp -m udp --dport 67 -j ACCEPT
> -A INPUT -i enp1s0 -p tcp -m tcp --dport 67 -j ACCEPT
> -A INPUT -i enp1s0 -p udp -m udp --dport 53 -j ACCEPT
> -A INPUT -i enp1s0 -p tcp -m tcp --dport 53 -j ACCEPT
> -A FORWARD -d 10.42.0.0/24 -o enp1s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
> -A FORWARD -s 10.42.0.0/24 -i enp1s0 -j ACCEPT
> -A FORWARD -i enp1s0 -o enp1s0 -j ACCEPT
> -A FORWARD -o enp1s0 -j REJECT --reject-with icmp-port-unreachable
> -A FORWARD -i enp1s0 -j REJECT --reject-with icmp-port-unreachable
ネットワークアドレス変換
4a5
> -A POSTROUTING -s 10.42.0.0/24 ! -d 10.42.0.0/24 -j MASQUERADE
しかし、これらの変更だけでは、機能する共有インターネット接続を作成するのに十分ではないようです。私は手動でコピーすると、私が本当に追求している8.8.8.8の優れたping応答を得ることができないからです。
わかりやすくするために、共有接続を使用するすべてのクライアントがデフォルトゲートウェイとして10.42.0.1を指定するデフォルトパスを持っていることも確認しました。
私が逃した部分を理解するのに役立つ人はいますか?
答え1
「共有インターネット接続」は特に明確に定義されていません。原則として、ルーティングを有効にして(まだアクティブでない場合)、「共有PC」と「他のPC」でLAN接続を手動で設定することで、「インターネット接続」を「共有」できます。 NATも必要ありません。
その後、WLANアクセスポイントの有効化などのバリエーションがあります。
これは、systemdなしでDevuanシステムで使用され、NetworkがインターフェイスNATを管理するスクリプトです。これは、「共有インターネット接続」が意味するものであってもなくてもよい。
#!/bin/bash
# masquerade $1 (e.g. eth0, ppp0) as $2 (default wlan0)
INTIF="$1"
EXTIF=${2:-wlan0}
echo $INTIF $EXTIF
modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_nat
modprobe iptable_nat
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
このスクリプトの一部の項目は必ずしも必要ではありませんが、便利だと思います。
DHCPサーバーを実行する必要がある場合は、手動で起動してdhcpd
設定ファイルを事前設定します。