Linux Unraid 通过不同的接口路由流量

Linux Unraid 通过不同的接口路由流量

我有两个接口:eth0 和 tun5。eth0 是到路由器的以太网,tun5 是 VPN 隧道。它们位于基于 Linux 的 UnRaid 服务器上。它是一台无头服务器,所以我通过 SSH 访问它。

我希望所有流量都通过 VPN、tun5,除了端口 X、Y 和 Z(我希望它们通过以太网来往)。

ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.11  netmask 255.255.255.0  broadcast 192.168.1.255
        ether 00:19:66:e6:bb:52  txqueuelen 1000  (Ethernet)
        RX packets 21687  bytes 7281101 (6.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 64398  bytes 5734722 (5.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 0  (Local Loopback)
        RX packets 3496  bytes 942735 (920.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3496  bytes 942735 (920.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tun5: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.119.1.6  netmask 255.255.255.255  destination 10.119.1.5
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 100  (UNSPEC)
        RX packets 9  bytes 764 (764.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    1      0        0 eth0
10.119.1.5      0.0.0.0         255.255.255.255 UH    0      0        0 tun5
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0


iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination


ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default


ip route
default via 192.168.1.1 dev eth0  metric 1
10.119.1.5 dev tun5  proto kernel  scope link  src 10.119.1.6
127.0.0.0/8 dev lo  scope link
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.11

路由器为其分配了一个 IP 192.168.1.11,这就是我用来 SSH 的 IP。

有人能帮我找出一些路线吗?我尝试过以下方法: http://lartc.org/howto/lartc.rpdb.multiple-links.htmlhttp://www.linuxhorizo​​n.ro/iproute2.html 但我在最后被锁定在 SSH 之外,无法继续。如果我可以直接访问控制台,我是否走在正确的轨道上?

答案1

路由发生在 IP 层,端口始于 TCP 层。因此您不能使用路由来切换端口。

如果您想使用 iptables,您可以尝试这种方法:iptables 将特定端口转发到特定网卡 (StackOverflow)

标记需要经过的包裹eth1

iptables -A PREROUTING -i eth0 -t mangle -p tcp --dports 22,53,80,443 -j MARK --set-mark 1

添加规则eth1.out来路由标记的包裹:

echo "201 eth1.out" >> /etc/iproute2/rt_tables
ip rule add fwmark 1 table eth1.out

通过以下方式路由所有标记的包裹eth1

/sbin/ip route add default via 192.168.2.1 dev eth1 table eth1.out

其他所有路由通过eth2

/sbin/ip route add default via 192.168.3.1 dev eth2

如果MARK规则不起作用,请尝试使用CONNMARK

你也可以告诉 ssh 使用特定地址连接到服务器。你可以使用

ssh <user>@<host> -b <IP to bind>

或者你可以在 ~/.ssh/config 中像这样更永久地设置它

Host        <alias name>
HostName    <remote hostname>
BindAddress <IP to bind>

<IP to bind>在这种情况下192.168.1.11

相关内容