V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wniming
V2EX  ›  Linux

Linux 如何为在本机上创建的 nat 网络设置不同于系统的默认路由的默认路由?

  •  
  •   wniming · 12 小时 15 分钟前 · 528 次点击

    这里说的 nat 网络是指类似于 docker 服务创建的 docker0 接口,lxc-net 服务创建的 lxcbr0 接口,virtnetworkd 服务创建的 virbr0 接口,这些本质都是用来给虚拟机或容器用的网桥,默认情况下虚拟机或容器会使用系统的默认路由来连接互联网,但是我的系统的默认路由是走主路由的,主路由没有科学上网功能,我想让虚拟机或容器走带有科学上网功能的旁路由,有什么办法实现吗?

    比如我的本机的 ip 是 192.168.1.2 ,主路由的 ip 是 192.168.1.1 ,科学上网旁路由的 ip 是 192.168.1.253 ,我可以用下面几条命令创建一个 nat 网络:

    BRIDGE=nat-br
    NETWORK=192.168.53.0
    NETMASK=255.255.255.0
    GATEWAY=192.168.53.1
    DHCPRANGE=192.168.53.2,192.168.53.254
    
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    if [ ! -e /sys/class/net/$BRIDGE/bridge ] ; then
    	ip link add name $BRIDGE type bridge
    	ip addr add $GATEWAY/$NETMASK dev $BRIDGE
    	ip link set $BRIDGE up
    	
    	iptables -t nat -I POSTROUTING -s $NETWORK/$NETMASK -j MASQUERADE
    	iptables -t nat -A PREROUTING -p udp -i $BRIDGE --dport 53 -j DNAT --to-destination 192.168.1.253:53
    	dnsmasq --interface=$BRIDGE --strict-order --except-interface=lo --listen-address=$GATEWAY --bind-interfaces --dhcp-range=$DHCPRANGE --dhcp-no-override
    fi
    
    

    如果系统的默认路由现在是 192.168.1.253 ,那么使用 nat-br 这个网桥的虚拟机或容器是能直接访问谷歌的,但我不想把系统的默认路由设置成 192.168.1.253 ,想保持为 192.168.1.1 ,同时又能达到让虚拟机或容器科学上网的效果

    6 条回复    2025-02-24 05:06:18 +08:00
    jinliming2
        1
    jinliming2  
       11 小时 48 分钟前
    prerouting 链,匹配 TCP/UDP 的源地址是容器的网段,转发到旁路由
    wniming
        2
    wniming  
    OP
       11 小时 41 分钟前
    @jinliming2 感谢回复,我尝试加了下面这两条命令但是不起作用:
    iptables -t nat -A PREROUTING -p tcp -s 192.168.53.0/24 -j DNAT --to-destination 192.168.1.253
    iptables -t nat -A PREROUTING -p udp -s 192.168.53.0/24 -j DNAT --to-destination 192.168.1.253
    jinliming2
        3
    jinliming2  
       11 小时 28 分钟前
    建议 TRACE 一下规则,看看匹配的对不对
    druggo
        4
    druggo  
       10 小时 56 分钟前   ❤️ 2
    新建一个路由表,然后设置规则使用它就好了:
    ip route add default via 192.168.1.253 dev eth0 table 110
    ip rule add from 192.168.53.0/24 table 110
    wniming
        5
    wniming  
    OP
       10 小时 51 分钟前
    @druggo 大佬牛逼,你的方法管用
    wniming
        6
    wniming  
    OP
       6 小时 31 分钟前
    @druggo 刚刚发现这种方法会导致主机无法 ssh 到虚拟机,需要把 from 192.168.53.0/24 改成 iif nat-br 才可以
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5669 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 03:37 · PVG 11:37 · LAX 19:37 · JFK 22:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.