Iptables

為多個 USB 調製解調器 linux 配置路由

  • February 6, 2019

我正在嘗試創建自定義代理伺服器。我有一個帶有 2 個 USB LTE 調製解調器和 LAN 電纜的 Rasp Pi 盒子。我試圖讓它們與 squid 代理一起工作,以便我可以根據內部 ip 將流量發送到特定調製解調器的 NIC,我還需要能夠訪問調製解調器的管理儀表板,以便能夠在它停止工作時以程式方式重置它適當地。因此,當我將調製解調器單獨連接到 rasp 盒時,我看到管理儀表板具有預設網關的地址 - 192.168.0.1,所以我想我可以使用這個設置:

$: cat /etc/network/interfaces
source-directory /etc/network/interfaces.d

auto eth0
iface eth0 inet dhcp

allow-hotplug eth1
iface eth1 inet static
   address 192.168.1.100
   netmask 255.255.255.0

allow-hotplug eth2
iface eth2 inet static
   address 192.168.2.100
   netmask 255.255.255.0

$: ip route add 192.168.1.0/24 dev eth1 table rteth1
$: ip route add default via 192.168.1.1 dev eth1 table rteth1
$: ip route add 10.0.0.0/24 dev eth0 src 10.0.0.1 table rteth1
$: ip rule add from 192.168.1.0/24 table rteth1
$: ip rule add to 192.168.1.0/24 table rteth1
$: iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
$: iptables -t mangle -A POSTROUTING -m ttl --ttl-gt 50 -o eth1 -j TTL --ttl-set 65

192.168.2.0/24 網路的設置相同。當我以這種方式配置網路並嘗試請求管理儀表板(192.168.1.1)時 - 我收到此錯誤:

$: curl 192.168.1.1
curl: (7) Failed to connect to 192.168.1.1 port 80: No route to host

當我嘗試設置它時: $: ip route add default via 192.168.0.1 dev eth1 table rteth1

我得到:RTNETLINK answers: Network is unreachable

我怎樣才能正確設置這樣的網路?

我自己想通了。首先,我需要將 NIC ip 地址設置為 USB 調製解調器子網中的地址 - ip 192.168.1.1 不起作用,所以:

$: cat /etc/network/interfaces
source-directory /etc/network/interfaces.d

auto eth0
iface eth0 inet dhcp

allow-hotplug eth1
iface eth1 inet static
   address 192.168.0.100
   netmask 255.255.255.0

allow-hotplug eth2
iface eth2 inet static
   address 192.168.0.101
   netmask 255.255.255.0

其次,我錯過了將網關 IP 地址從一個子網轉換到另一個子網的本地規則,它應該是這樣的:

# Setup routing for NIC
$: ip route add 192.168.1.0/24 dev eth1 table rteth1
$: ip route add default via 192.168.0.1 dev eth1 table rteth1
$: ip route add 10.0.0.0/24 dev eth0 src 10.0.0.1 table rteth1
$: ip rule add from 192.168.1.0/24 table rteth1
$: ip rule add to 192.168.1.0/24 table rteth1
# Substitute sender ip addres by router ip address to recive back package
$: iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Set up local routing, when requesting ip localy Substitute it
$: iptables -t nat -A OUTPUT -o eth1 -p tcp -d 192.168.1.1 -j DNAT --to-destination 192.168.0.1
# execute changes
ip route flush cache

相同的設置適用於具有 192.168.2.0/24 網路和其他網路的 eth2。通過這個設置,我可以通過發出請求 curl 192.168.1/2.1 來呼叫特定調製解調器的儀表板,我以前不知道非常方便的命令:tcpdump,在它的幫助下,我設法找出了問題:

$: tcpdump -i eth1
$: 05:28:30.685038 ARP, Request who-has 192.168.1.1 tell 192.168.0.100, length 28
$: 05:28:31.732788 ARP, Request who-has 192.168.1.1 tell 192.168.0.100, length 28
$: 05:28:32.772795 ARP, Request who-has 192.168.1.1 tell 192.168.0.100, length 28
$: 05:28:33.813216 ARP, Request who-has 192.168.1.1 tell 192.168.0.100, length 28

引用自:https://serverfault.com/questions/952424