AnyConnect配合udp-broadcast-relay实现LAN游戏联机

手机上遇到个局域网联机游戏, 不支持输入IP, 使用 OpenVPN 搭建后, 无法进行 UDP 广播, 使用 SoftEther VPN 搭建的 OpenVPN, 不知道什么原因, 疯狂走网速, 发现 AnyConnect 配合 udp-broadcast-relay 可以实现LAN游戏联机, 搭建时使用的机器为腾讯云学生机, 系统为 CentOS 7.

  1. 搭建 AnyConnect

    1. 安装 OCSERV

       yum install epel-release -y
       yum install ocserv -y
      
    2. 生成证书

       mkdir CA
       cd CA
       
       certtool --generate-privkey --outfile ca-key.pem 
       cat << _EOF_ >ca.tmpl 
       cn = "VPN CA" 
       organization = "Big Corp" 
       serial = 1 
       expiration_days = -1 
       ca 
       signing_key 
       cert_signing_key 
       crl_signing_key 
       _EOF_
      
       certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem
       
       certtool --generate-privkey --outfile server-key.pem
      
       cat << _EOF_ >server.tmpl 
       cn = "VPN server" 
       ip_address = "1.2.3.4" # 这里的 1.2.3.4 修改为自己的服务器IP
       organization = "MyCompany" 
       expiration_days = -1 
       signing_key 
       encryption_key #only if the generated key is an RSA one 
       tls_www_server 
       _EOF_
       
       certtool --generate-certificate --load-privkey server-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template server.tmpl --outfile server-cert.pem
       
       cp ca-cert.pem /etc/pki/ocserv/cacerts/ca.crt
       cp server-cert.pem /etc/pki/ocserv/public/server.crt
       cp server-key.pem /etc/pki/ocserv/private/server.key
      
    3. 配置 OCSERV

       vim /etc/ocserv/ocserv.conf
      

      修改后内容如下

       # User authentication method. Could be set multiple times and in 
       # that case all should succeed. To enable multiple methods use
       # multiple auth directives. Available options: certificate, 
       # plain, pam, radius, gssapi.
       #
       # Note that authentication methods cannot be changed with reload.
       
       # certificate:
       #  This indicates that all connecting users must present a certificate.
       #
       # pam[gid-min=1000]:
       #  This enabled PAM authentication of the user. The gid-min option is used 
       # by auto-select-group option, in order to select the minimum valid group ID.
       #
       # plain[passwd=/etc/ocserv/ocpasswd,otp=/etc/ocserv/users.otp]
       #  The plain option requires specifying a password file which contains
       # entries of the following format.
       # "username:groupname1,groupname2:encoded-password"
       # One entry must be listed per line, and 'ocpasswd' should be used
       # to generate password entries. The 'otp' suboption allows to specify
       # an oath password file to be used for one time passwords; the format of
       # the file is described in https://code.google.com/p/mod-authn-otp/wiki/UsersFile
       #
       # radius[config=/etc/radiusclient/radiusclient.conf,groupconfig=true,nas-identifier=name,override-interim-updates=false]:
       #  The radius option requires specifying freeradius-client configuration
       # file. If the groupconfig option is set, then config-per-user will be overriden,
       # and all configuration will be read from radius. The 'override-interim-updates' if set to
       # true will ignore Acct-Interim-Interval from the server and 'stats-report-time' will be considered.
       #
       # gssapi[keytab=/etc/key.tab,require-local-user-map=true,tgt-freshness-time=900]
       #  The gssapi option allows to use authentication methods supported by GSSAPI,
       # such as Kerberos tickets with ocserv. It should be best used as an alternative
       # to PAM (i.e., have pam in auth and gssapi in enable-auth), to allow users with
       # tickets and without tickets to login. The default value for require-local-user-map
       # is true. The 'tgt-freshness-time' if set, it would require the TGT tickets presented
       # to have been issued within the provided number of seconds. That option is used to
       # restrict logins even if the KDC provides long time TGT tickets.
       
       auth = "plain[/etc/ocserv/ocpasswd]"
       #auth = "pam"
       #auth = "pam[gid-min=1000]"
       #auth = "plain[passwd=./sample.passwd,otp=./sample.otp]"
       #auth = "certificate"
       #auth = "radius[config=/etc/radiusclient/radiusclient.conf,groupconfig=true]"
       
       # Specify alternative authentication methods that are sufficient
       # for authentication. That is, if set, any of the methods enabled
       # will be sufficient to login.
       #enable-auth = "certificate"
       #enable-auth = "gssapi"
       #enable-auth = "gssapi[keytab=/etc/key.tab,require-local-user-map=true,tgt-freshness-time=900]"
       
       # Accounting methods available:
       # radius: can be combined with any authentication method, it provides
       #      radius accounting to available users (see also stats-report-time).
       #
       # pam: can be combined with any authentication method, it provides
       #      a validation of the connecting user's name using PAM. It is
       #      superfluous to use this method when authentication is already
       #      PAM.
       #
       # Only one accounting method can be specified.
       #acct = "radius[config=/etc/radiusclient/radiusclient.conf]"
       
       # Use listen-host to limit to specific IPs or to the IPs of a provided 
       # hostname.
       #listen-host = [IP|HOSTNAME]
       
       # When the server has a dynamic DNS address (that may change),
       # should set that to true to ask the client to resolve again on
       # reconnects.
       #listen-host-is-dyndns = true
       
       # TCP and UDP port number
       tcp-port = 4443
       udp-port = 4443
       
       # Accept connections using a socket file. It accepts HTTP
       # connections (i.e., without SSL/TLS unlike its TCP counterpart),
       # and uses it as the primary channel. That option cannot be
       # combined with certificate authentication.
       #listen-clear-file = /var/run/ocserv-conn.socket
       
       # The user the worker processes will be run as. It should be
       # unique (no other services run as this user).
       run-as-user = ocserv
       run-as-group = ocserv
       
       # socket file used for IPC with occtl. You only need to set that,
       # if you use more than a single servers.
       #occtl-socket-file = /var/run/occtl.socket
       
       # socket file used for server IPC (worker-main), will be appended with .PID
       # It must be accessible within the chroot environment (if any), so it is best
       # specified relatively to the chroot directory.
       socket-file = ocserv.sock
       
       # The default server directory. Does not require any devices present.
       chroot-dir = /var/lib/ocserv
       
       ### All configuration options below this line are reloaded on a SIGHUP.
       ### The options above, will remain unchanged. Note however, that the 
       ### server-cert, server-key, dh-params and ca-cert options will be reloaded
       ### if the provided file changes, on server reload. That allows certificate
       ### rotation, but requires the server key to remain the same for seamless
       ### operation. If the server key changes on reload, there may be connection
       ### failures during the reloading time.
       
       # Whether to enable seccomp/Linux namespaces worker isolation. That restricts the number of 
       # system calls allowed to a worker process, in order to reduce damage from a
       # bug in the worker process. It is available on Linux systems at a performance cost.
       # The performance cost is roughly 2% overhead at transfer time (tested on a Linux 3.17.8).
       # Note however, that process isolation is restricted to the specific libc versions
       # the isolation was tested at. If you get random failures on worker processes, try
       # disabling that option and report the failures you, along with system and debugging
       # information at: https://gitlab.com/ocserv/ocserv/issues
       isolate-workers = true
       
       # A banner to be displayed on clients
       #banner = "Welcome"
       
       # Limit the number of clients. Unset or set to zero for unlimited.
       #max-clients = 1024
       max-clients = 16
       
       # Limit the number of identical clients (i.e., users connecting 
       # multiple times). Unset or set to zero for unlimited.
       max-same-clients = 0
       
       # Limit the number of client connections to one every X milliseconds 
       # (X is the provided value). Set to zero for no limit.
       #rate-limit-ms = 100
       
       # Stats report time. The number of seconds after which each
       # worker process will report its usage statistics (number of
       # bytes transferred etc). This is useful when accounting like
       # radius is in use.
       #stats-report-time = 360
       
       # Keepalive in seconds
       keepalive = 32400
       
       # Dead peer detection in seconds.
       # Note that when the client is behind a NAT this value
       # needs to be short enough to prevent the NAT disassociating
       # his UDP session from the port number. Otherwise the client
       # could have his UDP connection stalled, for several minutes.
       dpd = 90
       
       # Dead peer detection for mobile clients. That needs to
       # be higher to prevent such clients being awaken too 
       # often by the DPD messages, and save battery.
       # The mobile clients are distinguished from the header
       # 'X-AnyConnect-Identifier-DeviceType'.
       mobile-dpd = 1800
       
       # If using DTLS, and no UDP traffic is received for this
       # many seconds, attempt to send future traffic over the TCP
       # connection instead, in an attempt to wake up the client
       # in the case that there is a NAT and the UDP translation
       # was deleted. If this is unset, do not attempt to use this
       # recovery mechanism.
       switch-to-tcp-timeout = 25
       
       # MTU discovery (DPD must be enabled)
       try-mtu-discovery = true
       
       # The key and the certificates of the server
       # The key may be a file, or any URL supported by GnuTLS (e.g., 
       # tpmkey:uuid=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx;storage=user
       # or pkcs11:object=my-vpn-key;object-type=private)
       #
       # The server-cert file may contain a single certificate, or
       # a sorted certificate chain.
       #
       # There may be multiple server-cert and server-key directives,
       # but each key should correspond to the preceding certificate.
       server-cert = /etc/pki/ocserv/public/server.crt
       server-key = /etc/pki/ocserv/private/server.key
       
       # Diffie-Hellman parameters. Only needed if you require support
       # for the DHE ciphersuites (by default this server supports ECDHE).
       # Can be generated using:
       # certtool --generate-dh-params --outfile /path/to/dh.pem
       #dh-params = /path/to/dh.pem
       
       # If you have a certificate from a CA that provides an OCSP
       # service you may provide a fresh OCSP status response within
       # the TLS handshake. That will prevent the client from connecting
       # independently on the OCSP server.
       # You can update this response periodically using:
       # ocsptool --ask --load-cert=your_cert --load-issuer=your_ca --outfile response
       # Make sure that you replace the following file in an atomic way.
       #ocsp-response = /path/to/ocsp.der
       
       # In case PKCS #11, TPM or encrypted keys are used the PINs should be available
       # in files. The srk-pin-file is applicable to TPM keys only, and is the 
       # storage root key.
       #pin-file = /path/to/pin.txt
       #srk-pin-file = /path/to/srkpin.txt
       
       # The password or PIN needed to unlock the key in server-key file.
       # Only needed if the file is encrypted or a PKCS #11 object. This
       # is an alternative method to pin-file.
       #key-pin = 1234
       
       # The SRK PIN for TPM.
       # This is an alternative method to srk-pin-file.
       #srk-pin = 1234
       
       # The Certificate Authority that will be used to verify
       # client certificates (public keys) if certificate authentication
       # is set.
       ca-cert = /etc/pki/ocserv/cacerts/ca.crt
       
       # The object identifier that will be used to read the user ID in the client 
       # certificate. The object identifier should be part of the certificate's DN
       # Useful OIDs are: 
       #  CN = 2.5.4.3, UID = 0.9.2342.19200300.100.1.1
       cert-user-oid = 0.9.2342.19200300.100.1.1
       
       # The object identifier that will be used to read the user group in the 
       # client  certificate. The object identifier should be part of the certificate's
       # DN. Useful OIDs are: 
       #  OU (organizational unit) = 2.5.4.11 
       #cert-group-oid = 2.5.4.11
       
       # The revocation list of the certificates issued by the 'ca-cert' above.
       # See the manual to generate an empty CRL initially. The CRL will be reloaded
       # periodically when ocserv detects a change in the file. To force a reload use
       # SIGHUP.
       #crl = /path/to/crl.pem
       
       # Uncomment this to enable compression negotiation (LZS, LZ4).
       #compression = true
       
       # Set the minimum size under which a packet will not be compressed.
       # That is to allow low-latency for VoIP packets. The default size
       # is 256 bytes. Modify it if the clients typically use compression
       # as well of VoIP with codecs that exceed the default value.
       #no-compress-limit = 256
       
       # GnuTLS priority string; note that SSL 3.0 is disabled by default
       # as there are no openconnect (and possibly anyconnect clients) using
       # that protocol. The string below does not enforce perfect forward
       # secrecy, in order to be compatible with legacy clients.
       #
       # Note that the most performant ciphersuites are the moment are the ones
       # involving AES-GCM. These are very fast in x86 and x86-64 hardware, and
       # in addition require no padding, thus taking full advantage of the MTU.
       # For that to be taken advantage of, the openconnect client must be
       # used, and the server must be compiled against GnuTLS 3.2.7 or later.
       # Use "gnutls-cli --benchmark-tls-ciphers", to see the performance
       # difference with AES_128_CBC_SHA1 (the default for anyconnect clients)
       # in your system.
       
       tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0"
       
       # More combinations in priority strings are available, check
       # http://gnutls.org/manual/html_node/Priority-Strings.html
       # E.g., the string below enforces perfect forward secrecy (PFS) 
       # on the main channel.
       #tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128"
       
       # That option requires the established DTLS channel to use the same
       # cipher as the primary TLS channel. This cannot be combined with
       # listen-clear-file since the ciphersuite information is not available
       # in that configuration. Note also, that this option implies that
       # dtls-legacy option is false; this option cannot be enforced
       # in the legacy/compat protocol.
       #match-tls-dtls-ciphers = true
       
       # The time (in seconds) that a client is allowed to stay connected prior
       # to authentication
       auth-timeout = 240
       
       # The time (in seconds) that a client is allowed to stay idle (no traffic)
       # before being disconnected. Unset to disable.
       #idle-timeout = 1200
       
       # The time (in seconds) that a client is allowed to stay connected
       # Unset to disable.
       #session-timeout = 86400
       
       # The time (in seconds) that a mobile client is allowed to stay idle (no
       # traffic) before being disconnected. Unset to disable.
       #mobile-idle-timeout = 2400
       
       # The time (in seconds) that a client is not allowed to reconnect after 
       # a failed authentication attempt.
       min-reauth-time = 300
       
       # Banning clients in ocserv works with a point system. IP addresses
       # that get a score over that configured number are banned for
       # min-reauth-time seconds. By default a wrong password attempt is 10 points,
       # a KKDCP POST is 1 point, and a connection is 1 point. Note that
       # due to difference processes being involved the count of points
       # will not be real-time precise.
       #
       # Score banning cannot be reliably used when receiving proxied connections
       # locally from an HTTP server (i.e., when listen-clear-file is used).
       #
       # Set to zero to disable.
       max-ban-score = 50
       
       # The time (in seconds) that all score kept for a client is reset.
       ban-reset-time = 300
       
       # In case you'd like to change the default points.
       #ban-points-wrong-password = 10
       #ban-points-connection = 1
       #ban-points-kkdcp = 1
       
       # Cookie timeout (in seconds)
       # Once a client is authenticated he's provided a cookie with
       # which he can reconnect. That cookie will be invalided if not
       # used within this timeout value. On a user disconnection, that
       # cookie will also be active for this time amount prior to be
       # invalid. That should allow a reasonable amount of time for roaming
       # between different networks.
       cookie-timeout = 300
       
       # If this is enabled (not recommended) the cookies will stay
       # valid even after a user manually disconnects, and until they
       # expire. This may improve roaming with some broken clients.
       #persistent-cookies = true
       
       # Whether roaming is allowed, i.e., if true a cookie is
       # restricted to a single IP address and cannot be re-used
       # from a different IP.
       deny-roaming = false
       
       # ReKey time (in seconds)
       # ocserv will ask the client to refresh keys periodically once
       # this amount of seconds is elapsed. Set to zero to disable (note
       # that, some clients fail if rekey is disabled).
       rekey-time = 172800
       
       # ReKey method
       # Valid options: ssl, new-tunnel
       #  ssl: Will perform an efficient rehandshake on the channel allowing
       #       a seamless connection during rekey.
       #  new-tunnel: Will instruct the client to discard and re-establish the channel.
       #       Use this option only if the connecting clients have issues with the ssl
       #       option.
       rekey-method = ssl
       
       # Script to call when a client connects and obtains an IP.
       # The following parameters are passed on the environment.
       # REASON, USERNAME, GROUPNAME, HOSTNAME (the hostname selected by client), 
       # DEVICE, IP_REAL (the real IP of the client), IP_REAL_LOCAL (the local
       # interface IP the client connected), IP_LOCAL (the local IP
       # in the P-t-P connection), IP_REMOTE (the VPN IP of the client),
       # IPV6_LOCAL (the IPv6 local address if there are both IPv4 and IPv6
       # assigned), IPV6_REMOTE (the IPv6 remote address), IPV6_PREFIX, and
       # ID (a unique numeric ID); REASON may be "connect" or "disconnect".
       # In addition the following variables OCSERV_ROUTES (the applied routes for this
       # client), OCSERV_NO_ROUTES, OCSERV_DNS (the DNS servers for this client),
       # will contain a space separated list of routes or DNS servers. A version
       # of these variables with the 4 or 6 suffix will contain only the IPv4 or
       # IPv6 values.
       
       # The disconnect script will receive the additional values: STATS_BYTES_IN,
       # STATS_BYTES_OUT, STATS_DURATION that contain a 64-bit counter of the bytes 
       # output from the tun device, and the duration of the session in seconds.
       
       #connect-script = /usr/bin/ocserv-script
       #disconnect-script = /usr/bin/ocserv-script
       
       # UTMP
       # Register the connected clients to utmp. This will allow viewing
       # the connected clients using the command 'who'.
       #use-utmp = true
       
       # Whether to enable support for the occtl tool (i.e., either through D-BUS,
       # or via a unix socket).
       use-occtl = true
       
       # PID file. It can be overriden in the command line.
       pid-file = /var/run/ocserv.pid
       
       # Set the protocol-defined priority (SO_PRIORITY) for packets to
       # be sent. That is a number from 0 to 6 with 0 being the lowest
       # priority. Alternatively this can be used to set the IP Type-
       # Of-Service, by setting it to a hexadecimal number (e.g., 0x20).
       # This can be set per user/group or globally.
       #net-priority = 3
       
       # Set the VPN worker process into a specific cgroup. This is Linux
       # specific and can be set per user/group or globally.
       #cgroup = "cpuset,cpu:test"
       
       #
       # Network settings
       #
       
       # The name to use for the tun device
       device = vpns
       
       # Whether the generated IPs will be predictable, i.e., IP stays the
       # same for the same user when possible.
       predictable-ips = true
       
       # The default domain to be advertised
       default-domain = example.com
       
       # The pool of addresses that leases will be given from. If the leases
       # are given via Radius, or via the explicit-ip? per-user config option then 
       # these network values should contain a network with at least a single
       # address that will remain under the full control of ocserv (that is
       # to be able to assign the local part of the tun device address).
       #ipv4-network = 192.168.1.0
       #ipv4-netmask = 255.255.255.0
       ipv4-network = 10.9.0.0
       ipv4-netmask = 255.255.255.0
       
       # An alternative way of specifying the network:
       #ipv4-network = 192.168.1.0/24
       
       # The IPv6 subnet that leases will be given from.
       #ipv6-network = fda9:4efe:7e3b:03ea::/64
       
       # Specify the size of the network to provide to clients. It is
       # generally recommended to provide clients with a /64 network in
       # IPv6, but any subnet may be specified. To provide clients only
       # with a single IP use the prefix 128.
       #ipv6-subnet-prefix = 128
       #ipv6-subnet-prefix = 64
       
       # Whether to tunnel all DNS queries via the VPN. This is the default
       # when a default route is set.
       #tunnel-all-dns = true
       
       # The advertized DNS server. Use multiple lines for
       # multiple servers.
       # dns = fc00::4be0
       #dns = 192.168.1.2
       dns = 114.114.114.114
       dns = 114.114.115.115
       
       # The NBNS server (if any)
       #nbns = 192.168.1.3
       
       # The domains over which the provided DNS should be used. Use
       # multiple lines for multiple domains.
       #split-dns = example.com
       
       # Prior to leasing any IP from the pool ping it to verify that
       # it is not in use by another (unrelated to this server) host.
       # Only set to true, if there can be occupied addresses in the
       # IP range for leases.
       ping-leases = false
       
       # Use this option to enforce an MTU value to the incoming
       # connections. Unset to use the default MTU of the TUN device.
       #mtu = 1420
       
       # Unset to enable bandwidth restrictions (in bytes/sec). The
       # setting here is global, but can also be set per user or per group.
       #rx-data-per-sec = 40000
       #tx-data-per-sec = 40000
       
       # The number of packets (of MTU size) that are available in
       # the output buffer. The default is low to improve latency.
       # Setting it higher will improve throughput.
       #output-buffer = 10
       
       # Routes to be forwarded to the client. If you need the
       # client to forward routes to the server, you may use the 
       # config-per-user/group or even connect and disconnect scripts.
       #
       # To set the server as the default gateway for the client just
       # comment out all routes from the server, or use the special keyword
       # 'default'.
       
       #route = 10.10.10.0/255.255.255.0
       #route = 192.168.0.0/255.255.0.0
       #route = fef4:db8:1000:1001::/64
       
       # Subsets of the routes above that will not be routed by
       # the server.
       
       #no-route = 192.168.5.0/255.255.255.0
       
       # If set, the script /usr/bin/ocserv-fw will be called to restrict
       # the user to its allowed routes and prevent him from accessing
       # any other routes. In case of defaultroute, the no-routes are restricted.
       # All the routes applied by ocserv can be reverted using /usr/bin/ocserv-fw
       # --removeall. This option can be set globally or in the per-user configuration.
       #restrict-user-to-routes = true
       
       # When set to true, all client's iroutes are made visible to all
       # connecting clients except for the ones offering them. This option
       # only makes sense if config-per-user is set.
       #expose-iroutes = true
       
       # Groups that a client is allowed to select from.
       # A client may belong in multiple groups, and in certain use-cases
       # it is needed to switch between them. For these cases the client can
       # select prior to authentication. Add multiple entries for multiple groups.
       # The group may be followed by a user-friendly name in brackets.
       #select-group = group1
       #select-group = group2[My special group]
       
       # The name of the (virtual) group that if selected it would assign the user
       # to its default group.
       #default-select-group = DEFAULT
       
       # Instead of specifying manually all the allowed groups, you may instruct
       # ocserv to scan all available groups and include the full list.
       #auto-select-group = true
       
       # Configuration files that will be applied per user connection or
       # per group. Each file name on these directories must match the username
       # or the groupname.
       # The options allowed in the configuration files are dns, nbns,
       #  ipv?-network, ipv4-netmask, rx/tx-per-sec, iroute, route, no-route,
       #  explicit-ipv4, explicit-ipv6, net-priority, deny-roaming, no-udp, 
       #  user-profile, cgroup, stats-report-time, and session-timeout.
       #
       # Note that the 'iroute' option allows to add routes on the server
       # based on a user or group. The syntax depends on the input accepted
       # by the commands route-add-cmd and route-del-cmd (see below). The no-udp
       # is a boolean option (e.g., no-udp = true), and will prevent a UDP session
       # for that specific user or group.
       
       #config-per-user = /etc/ocserv/config-per-user/
       #config-per-group = /etc/ocserv/config-per-group/
       
       # When config-per-xxx is specified and there is no group or user that
       # matches, then utilize the following configuration.
       #default-user-config = /etc/ocserv/defaults/user.conf
       #default-group-config = /etc/ocserv/defaults/group.conf
       
       # The system command to use to setup a route. %{R} will be replaced with the
       # route/mask and %{D} with the (tun) device.
       #
       # The following example is from linux systems. %R should be something
       # like 192.168.2.0/24 (the argument of iroute).
       
       #route-add-cmd = "ip route add %{R} dev %{D}"
       #route-del-cmd = "ip route delete %{R} dev %{D}"
       
       # This option allows to forward a proxy. The special keywords '%{U}'
       # and '%{G}', if present will be replaced by the username and group name.
       #proxy-url = http://example.com/
       #proxy-url = http://example.com/%{U}/
       
       # This option allows you to specify a URL location where a client can
       # post using MS-KKDCP, and the message will be forwarded to the provided
       # KDC server. That is a translation URL between HTTP and Kerberos.
       # In MIT kerberos you'll need to add in realms:
       #   EXAMPLE.COM = {
       #     kdc = https://ocserv.example.com/kerberos
       #     http_anchors = FILE:/etc/ocserv-ca.pem
       #   }
       # This option is available if ocserv is compiled with GSSAPI support. 
       
       #kkdcp = SERVER-PATH KERBEROS-REALM [email protected]:PORT
       #kkdcp = /kerberos EXAMPLE.COM [email protected]:88
       #kkdcp = /kerberos-tcp EXAMPLE.COM [email protected]:88
       
       #
       # The following options are for (experimental) AnyConnect client 
       # compatibility. 
       
       # This option will enable the pre-draft-DTLS version of DTLS, and
       # will not require clients to present their certificate on every TLS
       # connection. It must be set to true to support legacy CISCO clients
       # and openconnect clients < 7.08. When set to true, it implies dtls-legacy = true.
       cisco-client-compat = true
       
       # This option allows to disable the DTLS-PSK negotiation (enabled by default).
       # The DTLS-PSK negotiation was introduced in ocserv 0.11.5 to deprecate
       # the pre-draft-DTLS negotiation inherited from AnyConnect. It allows the
       # DTLS channel to negotiate its ciphers and the DTLS protocol version.
       #dtls-psk = false
       
       # This option allows to disable the legacy DTLS negotiation (enabled by default,
       # but that may change in the future).
       # The legacy DTLS uses a pre-draft version of the DTLS protocol and was
       # from AnyConnect protocol. It has several limitations, that are addressed
       # by the dtls-psk protocol supported by openconnect 7.08+.
       dtls-legacy = true
       
       # Client profile xml. A sample file exists in doc/profile.xml.
       # It is required by some of the CISCO clients.
       # This file must be accessible from inside the worker's chroot. 
       user-profile = profile.xml
       
       #Advanced options
       
       # Option to allow sending arbitrary custom headers to the client after
       # authentication and prior to VPN tunnel establishment. You shouldn't
       # need to use this option normally; if you do and you think that
       # this may help others, please send your settings and reason to
       # the openconnect mailing list. The special keywords '%{U}'
       # and '%{G}', if present will be replaced by the username and group name.
       #custom-header = "X-My-Header: hi there"
       
      

      修改了

      auth = "pam" -> auth = "plain[/etc/ocserv/ocpasswd]"

      tcp-port = 443 udp-port = 443 -> tcp-port = 4443 udp-port = 4443

      max-same-clients = 2 -> max-same-clients = 0

      try-mtu-discovery = false -> try-mtu-discovery = true

      ipv4-network = 192.168.1.0 ipv4-netmask = 255.255.255.0 -> 取消注释, 并改为 ipv4-network = 10.9.0.0 ipv4-netmask = 255.255.255.0

      dns = 192.168.1.2 -> 取消注释, 并改为 dns = 114.114.114.114 dns = 114.114.115.115

    4. 生成 OCSERV 连接密码

       ocpasswd -c /etc/ocserv/ocpasswd username
      

      username 为连接用户名

    5. 配置 iptables

       yum install iptables-services -y
       systemctl mask firewalld
       systemctl enable iptables
       systemctl stop firewalld
       systemctl start iptables
       iptables --flush
       iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE
       iptables -A FORWARD -s 10.9.0.0/24 -j ACCEPT
       iptables-save > /etc/sysconfig/iptables
      
    6. 配置 IPv4 转发

       vim /etc/sysctl.conf
       添加net.ipv4.ip_forward = 1到文件顶部
       systemctl restart network.service
      
    7. 启动并设置开机启动

       systemctl start ocserv
       systemctl enable ocserv
      
  2. 搭建 udp-broadcast-relay

     cd
     yum install git gcc -y
     git clone https://github.com/nomeata/udp-broadcast-relay.git
     cd udp-broadcast-relay
     make
     ln -s `pwd`/udp-broadcast-relay /usr/bin/udp-broadcast-relay
    
  3. 整合 AnyConnect udp-broadcast-relay

     vim /usr/bin/ocserv-script-udp-broadcast-relay
    

    内容为

     #!/bin/bash
    
     function getDev()
     {
         dev="eth0"
         for ((t=0; t < 16; t++))
         do
             ifconfig vpns${t} &> /dev/null && dev="${dev} vpns${t}"
         done
         echo ${dev}
     }
     
     killall udp-broadcast-relay
     udp-broadcast-relay -f 1 3801 $(getDev)
    

    3801 为游戏的 UDP 广播端口

     vim /etc/ocserv/ocserv.conf
    

    connect-script = /usr/bin/ocserv-script
    disconnect-script = /usr/bin/ocserv-script
    取消注释并修改为
    connect-script = /usr/bin/ocserv-script-udp-broadcast-relay
    disconnect-script = /usr/bin/ocserv-script-udp-broadcast-relay

     chmod +x /usr/bin/ocserv-script-udp-broadcast-relay
     systemctl restart ocserv
    

标签: none

添加新评论