私のテストベンチには、enp2s0とenp3s0という2つのインターフェースを持つPCがあります。 IPはパブリックで、インターフェイスMACに基づいてDHCPを介して取得されます。私の作業台には、2台目のコンピュータであるRaspberry Pi Compute Module 3があり、このコンピュータをインターネットに公開したいと思います。 RPiとデスクトップサーバーは、PPPとシリアル接続を介して接続されます。両側の ppp インタフェースを ppp0 といいます。
パブリックIPからRPi CM3+にアクセスするためにppp0とenp3s0を接続する方法は? Linuxの多くのブリッジングとトンネリングオプションに迷子になりました...
私たちの組織は、スイッチのルーティングや使用を許可しません。残りのネットワークが損傷する可能性を最小限に抑えるソリューションであれば、何でも良いです。
答え1
第3のパブリックIPやVPNがなくても、私が望むことを達成することができました。
私は広範な規則に従ってDNATとSNATを使用しています。多くのソースでMASQUERADEを使用することをお勧めしますが、複数のインターネット接続インターフェイスが利用可能な場合、メトリックの低いインターフェイスはローカルトラフィックとPPPトラフィックの両方を取得し、ルーティングを妨げます。 MASQUERADE は特定の送信元 IP 割り当てを許可しませんが、SNAT は許可します。
次のiptablesルールを追加しました。
-A FORWARD -i enp3s0 -o ppp0 -j ACCEPT
-A FORWARD -i ppp0 -o enp3s0 -j ACCEPT
-t nat -A PREROUTING -i enp3s0 -j DNAT --to-destination 10.0.5.2
-t nat -A POSTROUTING -s 10.0.5.2 -j SNAT --to-source <enp3s0's ip>
IP転送が有効になっています。
echo 1 > /proc/sys/net/ipv4/ip_forward
理想的には、スクリプトは DHCP 設定後に SNAT ルールソース IP を設定します。私の場合、IPは無期限に帰属するため、静的ルールは問題ありません。
編集:dirktの提案に従って、間違ったインターフェイスからいくつかの発信パケットをキャプチャして新しいネットワーク名前空間を追加しました。インターフェイスを開く完全なスクリプトは次のとおりです。
ip netns add bridged
ip link set enp3s0 netns bridged
ip netns exec bridged ip link set dev enp3s0 up
ip netns exec bridged dhclient enp3s0
ip netns exec bridged iptables -A FORWARD -i enp3s0 -o ppp0 -j ACCEPT
ip netns exec bridged iptables -A FORWARD -i ppp0 -o enp3s0 -j ACCEPT
ip netns exec bridged iptables -t nat -A PREROUTING -i enp3s0 -j DNAT --to-destination 10.0.5.2
ip netns exec bridged iptables -t nat -A POSTROUTING -s 10.0.5.2 -j SNAT --to-source [my internet ip]
ip netns exec bridged echo 1 > /proc/sys/net/ipv4/ip_forward
stty -F /dev/ttyUSB1 raw
stty -F /dev/ttyUSB1 1000000
ip netns exec bridged pppd /dev/ttyUSB1 1000000 10.0.5.1:10.0.5.2 local noauth debug nodetach dump nocrtscts passive persist maxfail 0 holdoff 1
DHCPがデフォルトで新しい名前空間で実行されない理由はわかりませんが、今はdhclientを一度だけ呼び出すだけです。
ファイアウォールは名前空間でのみオフになります。
sudo ip netns exec bridged ufw disable
答え2
IPはパブリックで、インターフェイスMACに基づいてDHCPを介して取得されます。
これは、ブリッジング時にpppインターフェイスがDHCPを介して3番目のパブリックIPを取得する必要があることを意味します。これは ppp では動作しません。
ブリッジppp0
ppp0にはパブリックIPは必要ありませんが、ピアツーピア名前が示すように、接続です。だから足を置くことはできません。
では、パブリックIPからRPi CM3+にアクセスできますか?
最も簡単な方法は、ベンチPICで転送を有効にし、外部NICでNAT ppp0を有効にし、ポート転送ルールを追加することです。 (Googleには何百ものチュートリアルがあります)。これは意味する一部RPiのポートは、指定された外部IPまたは他のポート番号からアクセスできます。 Rpiにアクセスできます。みんなインターネット。これは、アクセスが必要な既知の数のサービスがRpiで実行されている場合に機能します。
RPIの場合持つ3番目のパブリックIPを持つには、ppp0接続の上にブリッジ可能なVPNを追加し(これにより追加のオーバーヘッドが発生する)、結果のton / tapインターフェイスをブリッジします。