イーサネットケーブルで接続された2台のコンピュータに「ネットワーク」があるとしましょう。マシンMが「マスター」であり、マシンSが「スレーブ」であると仮定する。 Mだけが外部の世界にアクセスできるので、このように名前をつけました。つまり、SにはMに接続するための1つのネットワークインターフェイスしかありません。 MはDebian用、SはWindows用です。
今、MはSが占めるeth0、ワイヤレスルーターに接続するためのwlan0、そして最近の可用性のために追加したppp0を持っています。技術的には、wlan0はwlx.....で、eth0はenpです....しかし、単純化します。
まず、問題にならないのは何ですか?
Mがwlan0を介して接続されたときのすべて。この場合、Sは完全なインターネットアクセス権を持ちます(Mのカーネルで転送を有効にしました)。外部からMにアクセスできます(必要に応じてMを介してSにアクセスすることもできます)。
さて、今はppp0(CDMAモデム)を追加しました。文字通り pppd をインターフェイスに設定する前に設定し、 ifup/ifdown で制御できる「正しい」インターフェイスを持つ前にも pon/poff 操作を実行できました。インターフェイスを設定する必要があるのはなぜですか?この記事の焦点である問題を発見したからです。しかし、「正しい」インターフェースを設定することは役に立ちません。
問題は何ですか?
S(例えば、MではないS)は、Mのppp0が動作していてwlan0がダウンしたときにインターネットアクセスに奇妙な問題がありました。表面的には何も機能しないようです。 Webブラウザが利用できず、外部ホストにpingを送信できません。しかし、外部ホストにpingを送信するときに、MとSのMのppp0で「tcpdump -n icmp」を実行しました。 Sがpingを始めたときに出てくるすべてのicmpパケットを見ることができましたが、着信ICMPパケット!私は外部インターフェイスについて話していることに注意してください。したがって、モデムに入ってくるicmp応答パケットはありません!
それ以外の場合、PPP は M.All プロトコルで期待どおりに動作します。 PPP では、コンピュータが正しいグローバル IP アドレスを取得することが重要です。外部からMへのSSH経由で接続でき、停止やその他の問題なしに通常のSSHセッションを取得できます。ただし、同時に外部ホストでは S を無視します。
どんな提案でも大変感謝します。
修正する:
「ipパス」出力:
1つの無線LAN UP、ppp DOWN
デフォルト値は 192.168.0.1 dev wlan0 onlink です。
10.42.0.0./24 dev eth0プロトタイプカーネルスコープリンクsrc 10.42.0.1
192.168.0.0/24 dev wlan0プロトタイプカーネルスコープリンクsrc 192.168.0.xx
注:192.168.0.1はワイヤレスルーターです。 192.168.0.xxはMのwlan0、10.42.0.1はMのeth0です。
2 wlanダウンリンク、pppアップリンク
デフォルトのdev ppp0範囲リンク
10.42.0.0/24 dev eth0プロトタイプカーネルスコープリンクsrc 10.42.0.1
172.17.4.111 dev ppp0 proto カーネル範囲リンク src xxx.xxx.xxx.xxx
注:xxx.xxx.xxx.xxxはグローバルIPアドレスであり、Mは実際に外部からアクセスできます。
ppp0の「ipアドレス」:inet xxx.xxx.xxx.xxxピア172.17.4.111/32範囲グローバルppp0
答え1
MマシンのパブリックIPアドレスの後にSマシンを隠すには、ファイアウォールルールが必要です。
iptables -t nat -A POSTROUTING -o ppp+ -j MASQUERADE
これがうまくいけば、Debian システムから起動するときにロードするいくつかのガイドラインを追加します。
wlan0インターフェースでこれが必要ない理由は、ワイヤレスルーターがすでにこれを実行しているためです。