着信VPNを備えたコンテナがあります。そのコンテナへの接続には、192.168.10.10
IPが割り当てられます。コンテナの仮想NICは、IPが10.10.10.1
で、ゲートウェイ(ホストブリッジ上)が10.10.10.254
です。
コンテナに直接ログインすると、パケットは10.10.10.1
をソースとして残し、(ブリッジを介して)戻る方法を認識します。
VPNで接続されると、パケットは送信元として192.168.10.10
を残して送信され、192.168.10.x
がネットワークでアドバタイズされないため(そのネットワークへのルートがないため)返送されません。
これには2つの解決策があります。
10.10.10.1
で出るように、コンテナをマスカレードします。192.168.10.x
ルートを宣伝します私は(さまざまな理由で)これらの解決策のいずれかを避けたいと思っていましたブリッジ自体でマスカレードを行うことが可能かどうか、ホスト側で?
言い換えると、パケットは192.168.10.10
のソースを使用してコンテナを離れ、「ブリッジによって」既知の10.10.10.1
IPに書き換えられます(その後、次の場合に再度書き換えられます)。返信はコンテナに返されます)
注:shorewall
でそれを行う方法は素晴らしいでしょうが、どんな情報も素晴らしいでしょう。
Shorewallの場合、/ etc/shorewall/masqを次のように編集できます。
br0 192.168.10.1/24 - tcp 22,80,443
また、VPN範囲のエントリを/ etc/shorewall/hostsと/ etc/shorewall/zoneに作成し、もちろん必要なルールを/ etc/shorewall/rulesに追加する必要があります。
ただし、 XY問題 の場合があると思います。
私があなたの設定を正しく理解していれば、onlyあなたのコンテナは192.168.10/24
の範囲を知っています。
つまり、マスカレードを使用しても問題は実際には解決されません(のみ)。
問題は、コンテナが実行されているホストにも192.168.10/24のルートがないことです。これは、そのルートがコンテナのルーティングテーブル内にのみ存在するためです。
したがって、少なくとも、次のものが必要になります。
ip r add 192.168.10.1/24 via 10.10.10.1
)それ以外の場合、コンテナホストは、VPNコンテナからの火星人に相当する金額を確認します。
MASQUERADE
iptablesターゲットはPOSTROUTING
テーブルで動作します。このテーブルは、あるインターフェイスから別のインターフェイスにルーティングされるパケットにのみ使用されます。ブリッジされたパケットは、おそらくIPレベルでいつでもアクセスされないため、マスカレードすることはできません。