我的机器运行的是 Ubuntu Server 16.04,它有两个网卡,eth0 和 eth1,如网络图所示。它的作用最初是将流量从 192.168.50.0/24 子网路由到 192.168.1.0/24 子网,DSL 路由器就是在这个子网中连接到互联网的。所以我的网络配置是
(eth0) 的输出cat /etc/network/interfaces.d/eth0
#auto eth0
#iface eth0 inet dhcp
auto eth0
iface eth0 inet static
address 192.168.1.7
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1
(eth1)的输出cat /etc/network/interfaces.d/eth1
#auto eth0
#iface eth0 inet dhcp
auto eth1
iface eth1 inet static
address 192.168.50.7
netmask 255.255.255.0
现在我添加了另一个蜂窝路由器,它也连接到互联网,并且它连接到 192.168.50.0/24 子网。我需要通过该蜂窝路由器路由部分互联网流量,但不是全部(例如 ssh 连接)。关于如何实现这一点,您有什么想法吗?
答案1
这里我们将其ssh
作为路由服务,使用mangle
iptable表来修改ssh
数据包。
sudo iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 0x1
我们将所有目标端口的数据包标记22
为0x1
。
现在保存并重新启动iptables
。
sudo service iptables save
sudo service iptables restart
/etc/iproute2/rt_tables
接下来,只需输入一个条目即可创建一个新的 IP 路由表
100 sshtable
为数据包编写规则ssh
。
ip rule add fwmark 0x1 lookup sshtable
在新表中添加路由sshtable
。所有其他流量将通过默认网关,可以通过ip route show
命令看到。
我们从主表复制除默认网关条目之外的所有条目。
sudo ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table sshtable $ROUTE; done
将数据包的默认网关条目添加ssh
到表中sshtable
sudo ip route add default gw 192.168.50.254 table sshtable
使用ip route show table sshtable
显示 所有路线sshtable
。
尝试。