如何设置 dnsmasq 以便连接到路由器的设备可以 ssh 到通过桌面连接的设备?

如何设置 dnsmasq 以便连接到路由器的设备可以 ssh 到通过桌面连接的设备?

我正在尝试一些设置,以允许我的设备在物理上彼此相邻,并加快我的工作流程,这样我就不需要坐在房子寒冷的地方的路由器旁边通过 ftp 发送文件,执行 ssh,无头服务器的常用功能。我最初的解决方案是使用我找到的 PCI 以太网卡,将所述卡插入机器 A,将计算机物理连接在一起,然后按照本文允许机器B通过机器A访问网络。

总结一下:

机器A是有2个以太网端口的桌面,IP地址在网络上192.168.1.9

机器 B 是一台笔记本电脑,有 1 个以太网端口,我的目标,IP 地址192.168.2.193

我按照正确设置 dnsmasq 的说明进行操作,以允许 B 通过 A 访问互联网。到目前为止,我可以 SSH 到 B 的唯一方法是通过 A 的 IP 设置隧道,转发“内部”的端口 22地址192.168.2.193

机器 B 可以访问外部网络,并且互联网行为正常

我的 ssh 命令: ssh -L 8080:192.168.2.193:22 [email protected] -N

如果需要更多信息,我可以提供解决此问题所需的任何额外信息。

编辑

使用机器 A 的建议输入更新了 iptables

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
val_input  tcp  --  anywhere             anywhere
ACCEPT     udp  --  192.168.2.0/24       anywhere             multiport dports bootps,bootpc /* dhcp */
ACCEPT     tcp  --  192.168.2.0/24       anywhere             tcp dpt:domain /* dns-tcp */
ACCEPT     udp  --  192.168.2.0/24       anywhere             udp dpt:domain /* dns-udp */

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

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain val_input (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere             state NEW,RELATED,ESTABLISHED
RETURN     all  --  anywhere             anywhere             state NEW,RELATED,ESTABLISHED
RETURN     all  --  anywhere             anywhere             state NEW,RELATED,ESTABLISHED
DROP       all  --  anywhere             anywhere

Chain bal_output (0 references)
target     prot opt source               destination

编辑2ip a机器A上 的输出

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp1s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:08:54:3d:e8:fd brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.1/24 brd 192.168.2.255 scope global enp1s5
       valid_lft forever preferred_lft forever
    inet 192.168.2.1/32 scope global enp1s5
       valid_lft forever preferred_lft forever
    inet6 fe80::208:54ff:fe3d:e8fd/64 scope link
       valid_lft forever preferred_lft forever
3: enp1s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:1e:90:78:9a:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.9/24 brd 192.168.1.255 scope global enp1s8
       valid_lft forever preferred_lft forever
    inet6 fe80::21e:90ff:fe78:9a97/64 scope link
       valid_lft forever preferred_lft forever

编辑3ifconfig机器B上 的输出

[jaz@Jaz-Jackson ~]$ ifconfig

........

ens5f5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.193  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::1a0f:d7d2:b678:665f  prefixlen 64  scopeid 0x20<link>
        ether 20:cf:30:71:b2:7e  txqueuelen 1000  (Ethernet)
        RX packets 379032  bytes 142855672 (136.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 510236  bytes 65400716 (62.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 32

......

答案1

您正在谈论将机器 A 变成路由器。 DNSMasq 是一个有用的组件,允许路由器向 dhcp 客户端分发 IP 地址,并提供名称服务器。然而,这本身还不够。

  1. 您需要在内核中启用数据包转发。sysctl net.ipv4.ip_forward=1使用 root 权限运行,例如 sudo。通过将其放在net.ipv4.ip_forward=1下面的某个位置使其永久化/etc/sysctl.d/,例如将其放在名为“routing.conf”的文件中。您可以通过运行来检查当前值sysctl net.ipv4.ip_forward

  2. 您需要网络地址转换(NAT),又名伪装。如果您使用 iptables,则顶部需要一个如下所示的节(对于面向外的接口enps1s8):

    *nat
    :PREROUTING     ACCEPT  [0:0]
    :INPUT          ACCEPT  [0:0]
    :OUTPUT         ACCEPT  [0:0]
    :POSTROUTING    ACCEPT  [0:0]
    
    -A POSTROUTING  -o enp1s8 -j MASQUERADE
    
    COMMIT
    
  3. 除了在内核中启用转发并设置 NAT 之外,您还需要告诉防火墙接受数据包转发请求,因此对于 iptables 来说,有一些规则如下:

    # Forward between client LAN and external WAN
    -A FORWARD                                            -i enp1s5 -o enp1s8 -j ACCEPT
    -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -i enp1s8 -o enp1s5 -j ACCEPT
    
  4. 最后,需要制定如何路由数据包的规则。这不是防火墙的问题,而是我会使用 iproute2。将其放入脚本中很方便:

    $ cat /usr/local/sbin/add-lan-route
    #! /usr/bin/ip -b
    
    addr add 192.168.2.1 dev enp1s5
    route add 192.168.2.1/24 via 192.168.2.1 dev enp1s5
    
  5. 机器 B(笔记本电脑)也想与机器 A(台式机)上的 dnsmasq 进行通信。因此需要更多的 iptables 规则来打开所需的端口。为了让事情井井有条,为此建立一个“链”是个好主意,但如果你对 iptables 没有信心,获得你想要的东西的最直接方法是这样的:

    -A INPUT -p udp -s 192.168.2.0/24 -m multiport --dports 67,68 -m comment --comment "dhcp"    -j ACCEPT
    -A INPUT -p tcp -s 192.168.2.0/24              --dport  53    -m comment --comment "dns-tcp" -j ACCEPT
    -A INPUT -p udp -s 192.168.2.0/24              --dport  53    -m comment --comment "dns-udp" -j ACCEPT
    
  6. 最后,您希望机器 B 的 dhcp 客户端获取正确的 IP 地址,该地址可以由机器 A 上的 dnsmasq 分发。基本的 dnsmasq 配置可能如下所示:

    interface=enp1s5
    dhcp-range=192.168.2.2,192.168.2.254,255.255.255.0,1h
    dhcp-host=20:cf:30:71:b2:7e,192.168.2.193,1h
    cache-size=2048
    

缓存大小并不重要,它只是一个建议,您可以修改或放弃。其余的允许插入 enp1s5 的任何东西请求 IP 地址,如果它是机器 B 的 MAC,它将获得您首选的 IP 地址。您还应该查看默认的 dnsmasq 配置,因为它有很多注释需要考虑。

完成所有这些步骤后,您应该希望机器 A 充当路由器,它可以向机器 B 授予名称服务和 IP 地址,并通过 enp1s8 对互联网连接进行 NAT。

相关内容