場合によっては、外部インターネットにアクセスできないサーバーにアプリケーションをアップロードします。
自分のコンピュータに同じ環境を作成してアプリケーションの特定の機能をテストし、エラー(外部ソースからRSSを読み取るなど)を防止したいと思います。
私はシミュレーションのためにイーサネットケーブルを抜くかどうかを考えましたが、それは非常に古いようで、サーバーの制限に比べてこれを行うと(特にPythonで)同じ例外が発生するかどうかはわかりません。
それでは、開発コンピュータで「外部アクセスなし」をどのようにシミュレートしますか?イーサネットインターフェイスを「無効」にして後で再度有効にすると(「no Trouble」コマンドを使用)、外部アクセスを持たないサーバーと同じ動作をしますか?
Ubuntu 10.04を使用しています。ありがとうございます!
答え1
デフォルトパスを削除すると問題が解決します。 show Routing Table を使用し/sbin/route
、次を使用してデフォルト値を削除できます。
sudo /sbin/route del default
これにより、システムはローカルネットワークに接続できますが、ローカルネットワークに向かうパケットをどこに送信するのかわかりません。これはおそらく「外部アクセスなし」の状況を非常に正確にシミュレートします。
再挿入するかroute add
(ゲートウェイが何であるかを覚えている)、ネットワークを再起動できます。私はNetManagerを持つシステムでこれを試してみましたが、デフォルトを切り替えると問題はありませんでした。ちょうどパネルアイコンをクリックし、ローカルネットワークを再選択して復元しました。 NMが他のイベントで単独でこのようなことをすることもできるので注意してください。
別の方法は、ルールを使用してiptables
アウトバウンドトラフィックをブロックすることです。しかし、ルーティングアプローチがより良いかもしれないと思います。
答え2
あなたが書いた
それでは、開発コンピュータで「外部アクセスなし」をどのようにシミュレートしますか?
イーサネットインターフェイスを「無効」にして後で再度有効にするにはどうすればよいですか?
これは2つの質問ですか、それとも1つの質問ですか?どういう意味なのかよくわかりませんsimulate "no external access"
。ただし、イーサネットインターフェイスを無効にするには、次のようにします。
#ifdown eth0
#ifup eth0
またはインターネットデバイスのいずれか。これにより、イーサネットインターフェイスがそれぞれオフになり、オンになります。
答え3
ホスト専用ネットワークインターフェイスのみを提供する仮想マシン(ユーザーモードLinux、VServer、OpenVZ、VirtualBox、VMWare、KVMなど)でコードを実行できます(つまり、仮想マシンからホスト以外の場所へのパスはありません)。 。
専用ユーザーとしてアプリケーションを実行している場合は、appuser
そのユーザーのネットワークアクセスを制限できます。あなたが持っていることを確認してくださいiptables
(Ubuntu:iptables iptablesのインストールhttp://bit.ly/software-small)とiproute2(ip
コマンド)(Ubuntu:IPルーティング iproute http://bit.ly/software-small インストール、iproute ドキュメント iproute-doc http://bit.ly/software-smallのインストール) がインストールされました。その後、iptables
実行中のプロセスから発信されるトラフィックに使用するようにタグを付け、appuser
そのユーザーの代替ルーティングテーブルを設定できますip rule
。ip route
ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
iptables -t mangle -A OUTPUT -m owner --uid-owner appuser -j MARK --set-mark 1
(注:テストされていません。また参照してください。追加の Linux IP パケットの変更例.)
答え4
これがコンテナの用途です(https://linuxcontainers.org/) chrootに少し似ていますが、より細かく設定されており、ネットワーク制御やその他の機能があります。
残念ながら、私はそれらを使用する方法を知りません。 (私の訓練は単にそれが存在し、その一般的な目的を理解するだけでした。)
docker
コンテナを管理するアプリケーションなので、これを手動で実行したくありません。