共有インターネット接続を手動で設定するにはどうすればよいですか?

共有インターネット接続を手動で設定するにはどうすればよいですか?

どのような措置を取るべきかを正確に知りたいです。手動Linuxベースのオペレーティングシステムを実行しているワークステーションで共有インターネット接続を構成します。

NetworkManagerサービスがインストールされているinitシステムとしてsystemdを使用するように構成されたLinuxディストリビューションを使用すると、自動化された方法(システムのデフォルトのネットワーク設定を使用)または次のユーティリティを使用して2つのインターフェース間の共有インターネット接続を構成できることがわかります。 。 nm-connection-editorで)。自動化された方法を使用して共有インターネット接続を構成した後にシステムへの変更を観察できる場合は、手動で再作成するために必要な知識を持つことは当然です。これを念頭に置いて、これを行うために行った手順と見つかった内容は次のとおりです。

  1. デフォルトでは、共有接続を「受信」するインターフェイスには、IPアドレス10.42.0.1および/24サブネットマスクが割り当てられます。

  2. dnsmasqはDHCPおよびDNSサービスを提供し、デフォルトでは10.42.0.1を受け取ります。

    • DHCPは10.42.0.2-10.42.0.254の範囲のIPアドレスを提供し、DNSはホストインターフェイスのデフォルトリゾルバを指します。
  3. 共有接続を「受信」するインターフェイスサブネットへのパスを含むようにルーティングテーブルが変更されました。今すぐ10.42.0.0/24 dev enp1s0プロトタイプカーネルスコープリンクsrc 10.42.0.1

  4. 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設定ファイルを事前設定します。

関連情報